我在执行命令move_uploaded_file
时遇到500错误。 (请注意,我没有返回false
)。不知道如何从中获取任何错误消息,但这显然会有所帮助!
我从数组$_FILES
开始,在我的测试中包含两个文件的元数据(它是一个非常受控制的测试)。当我只上传单个文件时,这条线路工作得很好,所以我知道它不是服务器权限问题。
<?php
print_r($_FILES);
$target_dir = "client_resources/";
foreach ($_FILES as $thisFile) {
print_r($thisFile);
$target_file = $target_dir . basename($thisFile['name']);
echo $thisFile['tmp_name'];
echo $target_file;
if (move_uploaded_file($thisFile['tmp_name'], $target_file)) {
echo 'uploaded';
} else {
// don't know how to get the error message from here
}
}
?>
如果我注释掉move_uploaded_file
块,我会收到此输出:
Array
(
[file0] => Array
(
[name] => back.jpeg
[type] => image/jpeg
[tmp_name] => C:\Windows\Temp\php8030.tmp
[error] => 0
[size] => 3936
)
[file1] => Array
(
[name] => images.jpeg
[type] => image/jpeg
[tmp_name] => C:\Windows\Temp\php8041.tmp
[error] => 0
[size] => 8257
)
)
Array
(
[name] => back.jpeg
[type] => image/jpeg
[tmp_name] => C:\Windows\Temp\php8030.tmp
[error] => 0
[size] => 3936
)
C:\Windows\Temp\php8030.tmp
client_resources/back.jpeg
Array
(
[name] => images.jpeg
[type] => image/jpeg
[tmp_name] => C:\Windows\Temp\php8041.tmp
[error] => 0
[size] => 8257
)
C:\Windows\Temp\php8041.tmp
client_resources/images.jpeg
我还尝试将此行放入try-catch
区块,但我仍然崩溃。
任何人都可以看到为什么这不再有效吗?谢谢!
答案 0 :(得分:1)
使用它来获取错误
$_FILES["pictures"]["error"];
如果你使用多个文件上传,那么使用像这样的数组上传功能。
//Loop through each file
for($i=0; $i<count($_FILES['upload']['name']); $i++) {
//Get the temp file path
$tmpFilePath = $_FILES['upload']['tmp_name'][$i];
//Make sure we have a filepath
if ($tmpFilePath != ""){
//Setup our new file path
$newFilePath = "./uploadFiles/" . $_FILES['upload']['name'][$i];
//Upload the file into the temp dir
if(move_uploaded_file($tmpFilePath, $newFilePath)) {
//Handle other code here
}
}
}
的说明
答案 1 :(得分:1)
创建脚本时应始终打开错误报告,以确保您不会遇到任何问题。这可以通过以下方式完成:
ini_set('display_errors', 1);
error_reporting(E_ALL);
现在您面临的另一个问题是您尝试将文件存储在相对路径中。要移动文件,您需要一个绝对路径。您可以按照以下方式完成:
$target_dir = $_SERVER['DOCUMENT_ROOT'] . '/client_resources/';
或者选择getcwd()
。 ( 获取您网站的当前工作目录 )
答案 2 :(得分:-1)
//您的数组键名称与[file0],[file1]不同,因此请使用for循环,并尝试这样,
<?php
print_r($_FILES);
$target_dir = "client_resources/";
for($i=0;$i<count($_FILES);$i++) {
$yourfilenm = $_FILES['file'.$i]['name'];
$target_file = $target_dir . $yourfilenm;
if (move_uploaded_file($_FILES['file'.$i]['tmp_name'], $target_file))
{
echo 'uploaded';
}
else
{
// don't know how to get the error message from here
}
}?>
答案 3 :(得分:-2)
尝试这样,
$move = @ move_uploaded_file($thisFile['tmp_name'], $target_file);
if(!$move)
echo 'Not uploaded';
else
echo 'uploaded';