PHP 不是将 PHP 文件转为 MP4,而是接收用户上传的 MP4 文件并存至服务器或云平台;需正确设置表单 enctype 和 file 类型,检查 $_FILES'video',校验 MIME 类型,再通过 SDK 上传至阿里云等平台。
这是个常见误解:PHP 文件(.php)是服务器端脚本,不能也不该“变成” MP4。你真正要做的,是让用户通过 HTML 表单上传一个已有的 MP4 视频文件,由 PHP 接收并保存到服务器或转存至平台(如七牛、阿里 OSS、腾讯云点播等)。
enctype 和 type
如果表单没配对,$_FILES 就为空,连文件名都拿不到。
enctype 必须为 "multipart/form-data",缺一不可type 必须是 "file",且建议加 accept="video/*" 限制前端可选类型input type="text" 或隐藏域伪造文件上传——完全无效$_FILES['video'] 上传失败的典型原因即使表单正确,PHP 层仍可能因配置拦截导致上传失败,$_FILES['video']['error'] 会返回非 0 值:
1 或 2:文件超过 upload_max_filesize(php.ini)或 MAX_FILE_SIZE(隐藏域,不强制)6:upload_tmp_dir 不可写或不存在7:磁盘写入失败(权限问题最常见)UPLOAD_ERR_NO_FILE(4):用户根本没选文件,但表单却提交了务必在处理前检查:
if ($_FILES['video']['error'] !== UPLOAD_ERR_OK) {
die('上传失败:' . $_FILES['video']['error']);
}
别直接用 move_uploaded_file() 存到网站目录——既不安全也不适合播放。推荐走平台 SDK 上传流式文件:
file_get_contents($_FILES['video']['tmp_name']) 或 fopen(..., 'r') 读取临时文件内容uploadVideo() 或 createUploadVideo()(阿里云),传入二进制数据或本地路径tmp_name
VideoId 或 PlayUrl,这才是你该存进数据库的字段关键点:PHP 本身不“生成 MP4”,它只是搬运工;视频格式合法性(如是否真为 MP4)需用 mime_content_type() 或 finfo_open() 校验,不能只看后缀名。