如何将move_uploaded_file的错误记录到文件中


How to log errors for move_uploaded_file to a file

我有一些上传文件的代码,它与我在另一个服务器上工作的代码完全相同,但它不能在这个新服务器上工作

// Move the file into the new folder
move_uploaded_file($_FILES["file"]["tmp_name"],'./img/myfolder/1/'. $_FILES["file"]["name"]);

我知道我可以使用:

if(move_uploaded_file($_FILES["file"]["tmp_name"],'./img/myfolder/1/'. $_FILES["file"]["name"])){
echo "success";
} else{
echo "failure";
}

然而,我有2个问题,脚本不是直接从页面运行,另一个应用程序,我没有访问源代码调用该页并发送图像。所以我不能做任何页面错误,我需要将错误记录到文件中。

第二个问题和主要问题是我不知道如何找出错误是什么。是否有一个错误代码,我可以拉如果else语句被调用。我将文件夹和子文件夹设置为777只是为了测试目的,以排除权限问题,在将问题解决后再推向生产。

我还检查了apache server error.log文件,它没有显示

我要这样做。

 $debug_file = _DIR_.'/debug.txt';
 $source = $_FILES["file"]["tmp_name"];
 $dest = './img/myfolder/1/'. $_FILES["file"]["name"];

if(! @move_uploaded_file($source,$dest) ){
     file_put_contents(  $debug_file, "ERROR[ ".date('Y-m-d H:i:s')." ] Could not move[ $source ] to[ $dest ]'n", FILE_APPEND);
     exit();
}

那么当你有了源路径和dest路径时,你可以确保它们确实存在于正确的位置。

-note- @符号将会抑制正常的PHP移动文件失败的警告,但是由于我们是自己记录的,这只是为了防止它妨碍。

我也放了一个退出,我假设这是这个脚本的要求,让文件正常工作,这样它就足够了,只是失败,不需要检查成功。

很可能是文件路径错误

你甚至可以输出缓冲php错误像这样,

ob_start();
$moved = move_uploaded_file($source,$dest);
$message = ob_get_clean();
if(!$moved){
    file_put_contents(  $debug_file, "ERROR[ ".date('Y-m-d H:i:s')." ] Could not move[ $source ] to[ $dest ] PHP message[ $message ]", FILE_APPEND);
 exit();
}

输出缓冲在后台运行的脚本上有奇效,

http://php.net/manual/en/function.ob-get-clean.php