我有一些上传文件的代码,它与我在另一台服务器上工作的完全相同的代码,但它不能在这台新服务器上运行
// 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文件,它没有显示任何内容
答案 0 :(得分:1)
我会做这样的事情。
$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();
}
然后,当您拥有source和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();
}
输出缓冲可以在后台运行的脚本上创建奇迹,