Php 从表单上载后,MP3文件的大小会减小并损坏
这是原始mp3文件:Php 从表单上载后,MP3文件的大小会减小并损坏,php,file-upload,corruption,Php,File Upload,Corruption,这是原始mp3文件: 以下是损坏的版本: 这是在上面移动文件的脚本: <?php require_once "File.php"; $path = "uploads/songs/"; $valid_formats = array("mp3"); $File = new File(); $path = $path."djdavid98/"; if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){ $
以下是损坏的版本: 这是在上面移动文件的脚本:
<?php
require_once "File.php";
$path = "uploads/songs/";
$valid_formats = array("mp3");
$File = new File();
$path = $path."djdavid98/";
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
$name = $_FILES['song']['name'];
$size = $_FILES['song']['size'];
$tmp = $_FILES['song']['tmp_name'];
if (!is_dir($path)) mkdir($path, 0777, true);
if($File->upload($tmp, $actual_song_name,$path)){
echo response($path.$actual_song_name,$actual_song_name,$txt.".".$ext);
}
else echo errText("Upload failed!", $path );
}
function errText($str,$fileName){
return '{"song":{"sucess":"0","message":"' .$str. '","fileName":"' . $fileName . '"}}';
}
function response($filePath,$actualFileName,$fileName){
return '{"song":{"sucess":"1","path":"' . $filePath . '","fileName":"' . $fileName . '"}}';
}
?>
File.php:
<?php
class File {
public function upload($file, $filename, $target_path) {
if (empty($filename)) { break; }
try {
$target_path = $target_path . $filename;
if(move_uploaded_file($file, $target_path)) {
return true;
} else{
return false;
}
} catch (Exception $ex) {
echo "Error on <strong>Line " . $ex->getLine() . " </strong>: " . $ex->getMessage();
}
}
}
?>
表格:
...
歌曲
浏览
...
此脚本在CloudFlare主机上运行,以防发生任何更改。从我注意到的情况来看,所有上传的mp3文件都是作为同一个文件上传的。我真的不知道为什么会发生这种情况,也不知道我该如何解决。感谢您的帮助。封面艺术(图像)文件被意外保存,而不是mp3文件
请参阅ajaxprocessform.php中的以下行:
$tmp = $_FILES['cover']['tmp_name']; //this is the image
if (!is_dir($path)) mkdir($path, 0777, true);
if($File->upload($tmp, $actual_song_name,$path)){ //image saved with mp3 path
非mp3文件也会发生同样的事情吗?@Gavin脚本也会上传图像文件,这些文件上传得很好。幕后还有什么事情发生,比如ftp传输吗?@Gavin这就是所有的脚本。我使用的唯一ftp传输是上载脚本。您是否具有服务器/主机的root访问权限?我想知道在调用move\u上传的\u文件之前文件是否已损坏?其他选项可能是出现故障的网络设备/代理,用于测试从其他位置或服务器本地(如果您还没有)进行的尝试。我想这也可能是一个在主机上运行的服务,它可以改变mp3文件,测试您的代码是否在您的机器本地运行,或者在不同的主机上运行。顺便说一句,我觉得你的代码很好。
$tmp = $_FILES['cover']['tmp_name']; //this is the image
if (!is_dir($path)) mkdir($path, 0777, true);
if($File->upload($tmp, $actual_song_name,$path)){ //image saved with mp3 path