привет, я хочу использовать php_move_upload_file для перемещения изображения из моей временной папки в постоянную папку

#php

#php

Вопрос:

привет, это функция, которая загружает изображение во временную папку и сохраняет местоположение в сеансе для дальнейшего использования

     function uploadPhoto()
{
    $rawImage = $_FILES['advPhoto'];
    $uploader = new ImageUploader($rawImage);
    $uploader->moveToProjectTempFolder();

    //1 save the current image in sassion (save the attachment class inside seesion)
    $uploader->saveInSession();
    // $temperrary = $uploader->CurrentImgTemperraryLocation();

    //2 send reponse the current image location
    AjaxHelper::sendAjaxResponse("images/temp/" . $uploader->CurrentImgTemperraryLocation());
    //create image tag and set the image source the "temp uploaded image path"
    // done
    //when the mail form is submitted
    //loop through session array 
    //move the user uploaded/approved images to permanent folder
    //save image information inside DB

}
  

вот функция, которая вызывает проблему, я хочу переместить изображение из временной папки в постоянное место, но php_move_uploaded_file() не работает в моем случае, я действительно не знаю, в чем проблема, пожалуйста, помогите мне, если вы знаете, в чем проблема. спасибо.

   function saveAdv()
{
    $advTitle = $_POST['advTitle'];
    $advContent = $_POST['advContent'];
    if (!empty($advTitle) amp;amp; !empty($advContent)) {

        if (DataValidation::isOnlyPersianOrEnglish($advTitle) amp;amp; 
DataValidation::isOnlyPersianOrEnglish($advContent)) {
            DBconnection::insertRow('ADVERTISEMENT', ['title', 'Advertisement', 'advDate'], 
[$advTitle, $advContent, date('y/m/d h:i:s')]);
            // AjaxHelper::sendAjaxResponse("success");

            $projectTemp = $_SESSION['ADVERTISEMENT']['Img'];
            move_uploaded_file(
                $projectTemp,
                DOC_ROOT . "/images/advertisementImg/"
            );
            AjaxHelper::sendAjaxResponse($projectTemp);
        }
    } else {
        AjaxHelper::sendErrorMessage(AjaxHelper::EMPTY_EMAIL_OR_PASSWORD);
    }
}
  

Я не получаю никаких ошибок, которые я уже отлаживал много раз, но никаких предупреждений и вообще никаких ошибок, расположение папок полностью правильное, а также проблем с разрешениями нет.

move_uploaded_file () работает довольно хорошо на первом шаге, когда я перемещаю изображение из системного временного местоположения во временное местоположение моего проекта, но не работает, когда я хочу переместить изображение из временного местоположения проекта в постоянное местоположение.

Комментарии:

1. «Не работает» — это не сообщение об ошибке или заявление о проблеме. Мы не можем исправить «не работает» в коде, так же как механик не может починить машину, которая «не работает», без какой-либо другой информации о проблеме. Как это не работает? Что именно происходит при запуске кода? Чего вы ожидали вместо этого? Пожалуйста, предоставьте подробную информацию о сообщениях об ошибках, неожиданном поведении и т. Д.

2. Если вы не видите никаких ошибок или предупреждений, пожалуйста, убедитесь, что ваша установка PHP настроена на запись ошибок и предупреждений в файл — см. stackify.com/php-error-logs-guide если вам нужно знать, как это настроить. Когда вы это сделаете, снова запустите свой код и проверьте файл на наличие каких-либо полезных сообщений.

3. Я не получаю никаких ошибок, которые я уже отлаживал много раз, но никаких предупреждений и вообще никаких ошибок, и расположение папок полностью правильное, а также нет проблем с разрешениями, которые очень сбивают с толку ,

4. move_uploaded_file () работает довольно хорошо на первом шаге, когда я перемещаю изображение из системного временного местоположения во временное местоположение моего проекта, но не работает, когда я хочу переместить изображение из временного местоположения проекта в постоянное местоположение

5. У вас настроено ведение журнала ошибок, как я указал выше? Вот где вам следует искать, если вы не видите ошибок. Кроме того, move_uploaded_file вернет false, если произойдет сбой, и вы не проверяете это в своем коде.

Ответ №1:

move_uploaded_file() предназначен только для перемещения файлов, которые только что были загружены в POST-запросе и хранятся во временном хранилище системы. В качестве документации (https://php.net/manual/en/function.move-uploaded-file.php ) утверждает, что сначала он проверяет, является ли файл допустимым загружаемым файлом, что означает, что он был загружен с помощью механизма HTTP POST upload PHP (это прямая цитата из документов). Если оно недопустимо по этому определению, оно завершается ошибкой.

Итак, если вы пытаетесь использовать move_uploaded_file() для копирования файлов из других местоположений (не из системного временного местоположения), которые не были напрямую загружены в это местоположение в текущем запросе, тогда это не сработает. Используйте общие функции PHP для перемещения других файлов, используя rename() функцию (см. https://www.php.net/manual/en/function.rename.php для получения подробной информации).