Проблема загрузки (отклоненное разрешение)

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

Предупреждение: move_uploaded_file (/загрузки) [function.move-uploaded-file]: не удалось открыть поток: Разрешение, отклоненное в/var/www/rto-vork/mvc/components/file на строке 105

Предупреждение: move_uploaded_file () [function.move-uploaded-file]: Не мог переместить '/tmp/php3WC6QP' в '/uploads' 'в/var/www/rto-vork/mvc/components/file на строке 105 строк (32) "не Могли переместить загруженный файл" успех

Я полагаю, что сам компонент прекрасен, и каталог загрузок уже был chmoded к 777

вот код для загрузки, в которой передается идентификатор файла правильно

public function uploadFile($id, $destination, $imagesOnly = false) {

    $return = false;

    if (substr($_FILES[$id]['name'], 0, 1) == '.') {

        $return = 'File names must not begin with a dot';

    } else {

        $isInvalidUpload = $this->isInvalidUpload($id, $imagesOnly);

        if ($isInvalidUpload) {

            $return = $isInvalidUpload;

        } else {

            if (move_uploaded_file($_FILES[$id]['tmp_name'], $destination)) {

                if (is_dir($destination)) {

                    if ($destination[-1] != '/' && $destination[-1] != '\\') {

                        $destination .= '/';

                    }

                    $destination .= $_FILES[$id]['tmp_name'];

                }

                chmod($destination, 0777);

            } else {

                $return = 'Could not move the uploaded file';

            }

        }

    }

    return $return;

}
1
задан Powerlord 29 June 2010 в 15:57
поделиться

3 ответа

Ваш код ошибочен:

public function uploadFile($id, $destination, $imagesOnly = false) {
   ...
   if (move_uploaded_file(...)) {
       if (is_dir(...)) {
           ...
       }
    } else {
       $return = 'Could not move the uploaded file';
    }
}

Вы вызываете метод с помощью uploadFile ('somename', '/ uploads') , поэтому код сначала пытается переместить загруженный файл в / uploads напрямую, но это каталог. move_uploaded_file () не действует как обычная команда «перемещения» файловой системы, источник И цель должны быть именами файлов. Итак, ваша первоначальная попытка перемещения не удалась, она возвращает false, и все переходит непосредственно к обратному вызову «Не удалось переместить файл». Он даже не пытается обработать $ destination как каталог

. Вам следует реструктурировать метод следующим образом:

public function uploadFile(...) {
    ...
    // if $destination is a directory, handle that fact
    if (is_dir($destination)) {
       $destination .= '/' . $new_file_name;
    }
    // THEN try to move the file
    if (move_uploaded_file($source, $destination)) {
       return('worked');
    } else {
       return('failed');
    }
}

Также имейте в виду, что, хотя это маловероятно, временное имя файла, которое назначает PHP, НЕ гарантированно быть уникальным с течением времени. Вполне возможно, что в какой-то момент в строке снова будет сгенерировано то же случайное имя, и вы перезапишете старую загрузку. Вы должны использовать имя файла, которое гарантированно будет уникальным, например поле «id» первичного ключа из базы данных или какой-либо другой источник неповторяющихся данных.

2
ответ дан 2 September 2019 в 23:24
поделиться

Похоже, вы пытаетесь переместить либо сам каталог, либо пытаетесь записать каталог вместо файла.

Warning: move_uploaded_file**(/uploads)** [function.move-uploaded-file]: failed to open stream: Permission denied in /var/www/rto-vork/mvc/components/file on line 105

Убедитесь, что вы используете сгенерированное имя временного файла и что вы указываете имя файла для сохранения файла.

0
ответ дан 2 September 2019 в 23:24
поделиться

Сообщение об ошибке довольно ясное: вы не можете записать в каталог /uploads.
Неудивительно - на unix-системах никто не разрешает писать в корень системы :)
Это ваша проблема - вы перепутали корень web и корень файловой системы.
в общем, этот код должен помочь, если остальной код в порядке:

$destination = $_SERVER['DOCUMENT_ROOT'].$destination;

но я сомневаюсь, что остальной код в порядке
скажем, $destination .= $_FILES[$id]['tmp_name']; довольно бессмысленный код.
Я думаю, вам лучше найти себе другой компонент или написать свой собственный

0
ответ дан 2 September 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: