Ошибка получения переменной массива файлов в другом массиве - PullRequest
0 голосов
/ 07 мая 2019

Я нахожусь в процессе перемещения кода 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 голосов
/ 07 мая 2019

Это: (не будет работать)

$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/')

Нет смысла иметь значение по умолчанию. В этом случае нет ничего разумного, если массив пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...