我有一些上传文件的代码,它与我在另一个服务器上工作的代码完全相同,但它不能在这个新服务器上工作
// 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