我有一个php文件设置,用于通过AWS将图像上传到亚马逊服务器。我来了一个错误消息,奇怪的是出现在我的prod服务器(亚马逊服务器),但不是我的开发服务器(只是一个普通的PHP服务器)。亚马逊服务器之前已经抛出错误,当某些东西没有按照它想要的结构。例如,如果某个标记包含href /home
,则会导致错误页面,除非我将标记更改为/home/
。
无论如何,我已经缩小了我的PHP脚本中的错误所在,我的php函数move_uploaded_file
评估为false并停止我的文件开始上传到Amazon s3(在此阶段文件已打开托管站点但尚未在s3上的服务器)。这是我的if语句,上面声明了一些应该评估为true的变量:
$target_dir = "../uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],$target_file)) {
//upload to s3
} else {
//error
}
我在if语句上方插入了以下代码,以查看它是什么吐出来的,这是它在评论中评估的内容:
echo json_encode($target_file);
// "..\/uploads\/Grad.jpeg"
echo $_FILES["fileToUpload"]["tmp_name"];
// /tmp/phpQA1667
echo json_encode(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"],$target_file));
// false
我不是PHP专家,似乎无法把我的发现者放在为什么它评估为假。谁能看到我出错的地方?
答案 0 :(得分:0)
move_uploaded_file在两种情况下返回false:
如果filename不是有效的上传文件,则不会执行任何操作,move_uploaded_file()将返回FALSE。
如果filename是有效的上传文件,但由于某种原因无法移动,则不会执行任何操作,move_uploaded_file()将返回FALSE。此外,还会发出警告。
无论哪种方式,您都应该在$ _FILES超全局中收到错误。
执行print_r($ _ FILES)并查看它给出的任何错误消息,以及是否填充了数组。
一旦发现错误,您就应该很容易确定问题的确切原因。
找到错误的完整列表