【发布时间】:2021-09-09 21:31:51
【问题描述】:
我正在尝试创建 PHP 视频上传脚本,它将 MOV 和许多其他视频文件扩展名转换为 .mp4 扩展名。我成功地将文件上传到文件夹并在数据库中创建了一条记录。但是当我尝试在 HTML5 视频标签中显示该视频文件时不起作用。
这是我的 PHP 代码:
<?php include "includes/dbh.inc.php"; ?>
<?php
if (isset($_SESSION['user_name'])){
if (isset($_POST['submit'])) {
$author = $_SESSION['user_name'];
$post_photo = time() . '-' . $_FILES["post_photo"]["name"];
if (file_exists($_FILES['post_photo']['tmp_name']) && is_uploaded_file($_FILES['post_photo']['tmp_name'])) {
$targetvid = md5(time());
$target_dirvid = "post_video/";
$target_filevid = $targetvid . basename($post_photo);
$uploadOk = 0;
$videotype = pathinfo($target_filevid, PATHINFO_EXTENSION);
//these are the valid video formats that can be uploaded and
//they will all be converted to .mp4
$video_formats = [
"mpeg",
"mp4",
"mov",
"wav",
"avi",
"dat",
"flv",
"MOV",
"3gp"
];
foreach ($video_formats as $valid_video_format) {
//You can use in_array and it is better
if (preg_match("/$videotype/", $valid_video_format)) {
$target_filevid = $targetvid . basename($_FILES["post_photo"] . ".mp4");
$uploadOk = 1;
break;
}
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo $message;
// if everything is ok, try to upload file
}
if (move_uploaded_file($_FILES["post_photo"]["tmp_name"], $target_dirvid . $target_filevid)) {
$sql = "INSERT INTO video_posts (author, video_post) VALUES ('$author', '$target_filevid')" ;
$result = mysqli_query($conn, $sql);
if ($result) {
echo "Success";
} else {
echo "Failed" . mysqli_error($conn);
}
}
}
}
}
?>
这是我的 HTML 视频标签 附言我正在使用 foreach 循环为每个用户显示视频。
<video id="myVideo" controls playsinline>
<source src="../post_video/<?php echo $user_post['video_post']; ?>" type="video/mp4">
<source src="../post_video/<?php echo $user_post['video_post']; ?>" type="video/ogg">
</video>
在数据库记录中,文件名与上传文件夹中的文件名完全相同,扩展名为 MP4,但仍未显示在 HTML 页面中。
【问题讨论】:
-
您无法通过简单地更改文件扩展名将视频转换为另一种格式。您实际上必须逐帧处理视频并将其保存为新格式。看; FFmpeg.
-
我需要寻找什么来做到这一点。我的目标是创建上传视频/图像网站,但与 Apple 类似的格式并不容易处理。任何我需要学习和寻找来完成我的任务的建议。谢谢。
-
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
如果你刚刚开始学习 PHP,那么你应该学习 PDO 而不是 mysqli。 PDO 更容易,更适合初学者。从这里开始phpdelusions.net/pdo & websitebeaver.com/…
-
请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。