首页 > 解决方案 > 在不同的数组中获取文件数组变量的问题

问题描述

我正在将文件上传系统的 PHP 代码移动到自己的文件中,因此我可以使用 AJAX 上传文件。

我遇到了无法获取此更新代码的问题:

$filename       =   $fileArray[$fileNameVar];
$tmp_name       =   $fileArray[$fileTmpNameVar];
$filesize       =   $fileArray[$fileSizeVar];
$file_error     =   $fileArray[$fileErrorVar];
$file           =   $fileArray[$p_img];

要像以前那样操作,像这样:

$filename       =   $fileArray['file']['name'];
$tmp_name       =   $fileArray['file']['tmp_name'];
$filesize       =   $fileArray['file']['size'];
$file_error     =   $fileArray['file']['error'];
$file           =   $fileArray['file'];

当我尝试var_dump从一组新变量中进行任何操作时,响应中没有显示任何内容。

有谁知道我需要如何设置这个数组?

这是完整的代码:

$p_img = $_FILES['file'];
//var_dump($p_img);

$fileNameVar = $p_img['name'];
$fileTmpNameVar = $p_img['tmp_name'];
$fileSizeVar = $p_img['size'];
$fileErrorVar = $p_img['error'];

//$fileFileVar = $p_img['file'];
try {
// If you make a file function, you can change where things are saved
// You can also change the destination (for portability)
    function UploadFile($fileArray = array(), $destinationFolder = '../project_images/') {
       /* $filename       =   $fileArray['file']['name'];
        $tmp_name       =   $fileArray['file']['tmp_name'];
        $filesize       =   $fileArray['file']['size'];
        $file_error     =   $fileArray['file']['error'];
        $file           =   $fileArray['file'];
       */
        $filename       =   $fileArray[$fileNameVar];
        $tmp_name       =   $fileArray[$fileTmpNameVar];
        $filesize       =   $fileArray[$fileSizeVar];
        $file_error     =   $fileArray[$fileErrorVar];
        $file           =   $fileArray[$p_img];

        var_dump($filename);
        // Save all the default data.
        // Success and error should be set by default to fail
        $return['error']        =   true;
        $return['success']      =   false;
        $return['file']['dest'] =   $destinationFolder.$filename;
        $return['file']['size'] =   $filesize;

        if($file_error == 0)
            $return['error']    =   false;
        // I added a directory creation function so you don't have to 
        // manually make folders. This will do it for you.
        if(!is_dir($destinationFolder))
            mkdir($destinationFolder,0755,true);
        // If your filename is not empty, return success or fail of upload
        if (!empty($filename))
            $return['success']  = (move_uploaded_file($tmp_name, $destinationFolder.$filename));

        return $return;
    }
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
    file_put_contents('error_log_top', "\n[{$date->format('Y-m-d H:i:s')}]" . "Error adding attachment: \n" . print_r($e, 1), FILE_APPEND);
}

编辑:我如何调用 uplaodFile 函数:

if(isset($_POST['create'])) {
    // Try uploading
    $upload =   UploadFile($_FILES);
    // If upload fails
    if(!$upload['success']) {
        echo '<h3>Sorry, an error occurred</h3>';
    }
    else {
        // You could add error handling here based on the results of 
        // each function's success or failure below.

        // Try to save it
        $saveToDb   =   SaveToDb($con,$upload['file']['dest']);
        // Get the profile from image name
        $profPic    =   ($saveToDb)? getPhoto($con,$upload['file']['dest']) : false;   
    }
}

编辑 - 更新代码:

function UploadFile($fileArray, $destinationFolder = '../project_images/') {
    $fileUploadData = $fileArray['file'];
    $filename       =   $fileUploadData['name'];
    $tmp_name       =   $fileUploadData['tmp_name'];
    $filesize       =   $fileUploadData['size'];
    $file_error     =   $fileUploadData['error'];

    var_dump($filename);
    // Save all the default data.
    // Success and error should be set by default to fail
    $return['error']        =   true;
    $return['success']      =   false;
    $return['file']['dest'] =   $destinationFolder.$filename;
    $return['file']['size'] =   $filesize;

    if($file_error == 0)
        $return['error']    =   false;

    if(!is_dir($destinationFolder))
        mkdir($destinationFolder,0755,true);
    // If your filename is not empty, return success or fail of upload
    if (!empty($filename))
        $return['success']  = (move_uploaded_file($tmp_name, $destinationFolder.$filename));

    return $return;
}

标签: phparraysfile

解决方案


这:(不起作用)

$filename       =   $fileArray[$fileNameVar];
$tmp_name       =   $fileArray[$fileTmpNameVar];
$filesize       =   $fileArray[$fileSizeVar];
$file_error     =   $fileArray[$fileErrorVar];
$file           =   $fileArray[$p_img];

与此不同:(将起作用)

$filename       =   $fileArray['file']['name'];
$tmp_name       =   $fileArray['file']['tmp_name'];
$filesize       =   $fileArray['file']['size'];
$file_error     =   $fileArray['file']['error'];
$file           =   $fileArray['file'];

在这段代码中,$fileArray 是一个数组数组。因此,您不能将其视为一维数组并期望从中获取实际值。

当你这样做时:

$p_img = $_FILES['file'];
$fileNameVar = $p_img['name'];
$fileTmpNameVar = $p_img['tmp_name'];
$fileSizeVar = $p_img['size'];
$fileErrorVar = $p_img['error'];

这些都是实际值。ie$fileNameVar包含文件上传时的实际原始名称。

你可以做的是:

$fileUploadData = $fileArray['file'];
$filename       =   $fileUploadData['name'];
$tmp_name       =   $fileUploadData['tmp_name'];
$filesize       =   $fileUploadData['size'];
$file_error     =   $fileUploadData['error'];
// Other code goes here.

其他想法:

function UploadFile($fileArray = array(), $destinationFolder = '../project_images/')

应该:

function UploadFile($fileArray, $destinationFolder = '../project_images/')

有默认值是没有意义的。在这种情况下,如果数组为空,则没有什么明智的做法。


推荐阅读