在不同的数组中获取文件数组变量时出现问题

时间:2019-05-07 19:23:31

标签: php arrays file

我正在将文件上传系统的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;
}

1 个答案:

答案 0 :(得分:0)

此:(不起作用)

$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'];

每个都是实际值。 即$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/')

没有默认值是没有道理的。如果数组为空,则在这种情况下没有任何明智的选择。