在move_uploaded_file命令中崩溃

时间:2015-03-23 04:59:33

标签: php file

我在执行命令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区块,但我仍然崩溃。

任何人都可以看到为什么这不再有效吗?谢谢!

4 个答案:

答案 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

    }
  }
}

以下是错误Errors in file uploading

的说明

答案 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';