Php 从表单上载后,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"){ $

这是原始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"){
        $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