gpt4 book ai didi

php - 使用php将mp4文件上传到数据库

转载 作者:行者123 更新时间:2023-11-29 07:36:00 24 4
gpt4 key购买 nike

我正在努力实现由 php、mysql、smarty 组成的网站,并且面临无法在注册屏幕上将 mp4 文件上传到数据库的问题,我可以使用 jpg 上传文件。

当我点击上传按钮时,它会在屏幕的左下角显示上传进度的百分比,最高可达 99%,然后在最后说“文件格式未知”,这是来自下面的 php 编码客户端背面白屏,服务器端不提示任何错误信息。

我的问题是,您是否可以从下面的编码中看出用于 mp4 的 case“1”有问题,而用于 jpg 的 case“2”工作正常。还是与上传功能相关的其他一些编码可能导致此问题?还是如果我可以在 appache 服务器上安装 ffmpeg 就可以解决这类问题?如果你能帮助我,我将不胜感激。

代码:

function Main($path, $width, $height, $dst_file, $header = false) {

if(!isset($path)) {
return array(0, "Image path is not set.");
}

if(!file_exists($path)) {
return array(0, "The file can not be found in the specified path.");
}

// Set the size of the image
if($width) $this->imgMaxWidth = $width;
if($height) $this->imgMaxHeight = $height;

$size = @GetimageSize($path);
$re_size = $size;

//Aspect ratio fixed processing
if($this->imgMaxWidth != 0) {
$tmp_w = $size[0] / $this->imgMaxWidth;
}

if($this->imgMaxHeight != 0) {
$tmp_h = $size[1] / $this->imgMaxHeight;
}

if($tmp_w > 1 || $tmp_h > 1) {
if($this->imgMaxHeight == 0) {
if($tmp_w > 1) {
$re_size[0] = $this->imgMaxWidth;
$re_size[1] = $size[1] * $this->imgMaxWidth / $size[0];
}
} else {
if($tmp_w > $tmp_h) {
$re_size[0] = $this->imgMaxWidth;
$re_size[1] = $size[1] * $this->imgMaxWidth / $size[0];
} else {
$re_size[1] = $this->imgMaxHeight;
$re_size[0] = $size[0] * $this->imgMaxHeight / $size[1];
}
}
}

$imagecreate = function_exists("imagecreatetruecolor") ? "imagecreatetruecolor" : "imagecreate";
$imageresize = function_exists("imagecopyresampled") ? "imagecopyresampled" : "imagecopyresized";

switch($size[2]) {
case "1":

if ($header) {
header("Content-Type: video/mp4");

$dst_im = copy($path, $dst_file);
return "";
} else {
$dst_file = $dst_file . ".mp4";

$dst_im = copy($path, $dst_file);
}
unlink($dst_im);

break;

case "2":

$src_im = imageCreateFromJpeg($path);
$dst_im = $imagecreate($re_size[0], $re_size[1]);

$imageresize($dst_im, $src_im, 0, 0, 0, 0, $re_size[0], $re_size[1], $size[0], $size[1]);

if ($header) {
header("Content-Type: image/jpeg");
imageJpeg($dst_im);
return "";
} else {
$dst_file = $dst_file . ".jpg";
if ($re_size[0] == $size[0] && $re_size[1] == $size[1]) {
copy($path, $dst_file);
} else {
imageJpeg($dst_im, $dst_file);
}
}

imagedestroy($src_im);
imagedestroy($dst_im);

break;

default:
return array(
0,
"file format is unknown"
);
}
return array(
1,
$dst_file
);

最佳答案

getimagesize() 仅适用于图像。它在视频文件上的行为是未定义的,它可能给出宽度和高度,但它可能会失败。即使它确实有效,$size[2] 也不会是“1”,因为这意味着它是 GIF 图像。

我会使用 mime_content_type() 来确定上传的文件类型。这将为上传的文件返回一个 mimetype,这意味着您需要有多个案例来处理图像文件:

$mimetype = mime_content_type($path);

switch ($mimetype) {
case "video/mp4":
// what is currently your case "1"
break;

case "image/jpeg":
case "image/pjpeg":
case "image/png":
case "image/gif":
// what is currently your case "2"
break;

default:
return array(
0,
"file format is unknown"
);
}

此函数是 Fileinfo 的一部分扩展,如果您的服务器上尚未启用它,您可能需要安装它。

关于php - 使用php将mp4文件上传到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com