Редактор загрузки изображений не работает

Сайт с редактором, работающим на поддомене. Он сообщает об ошибках: chmod() - не удалось открыть поток: нет такого файла или каталога, а move_uploaded_file() - не удалось открыть поток: такого файла или каталога нет. Все права доступа к файлам установлены правильно. Вот код загрузки изображения:

// files storage folder
$dir = $_SERVER['DOCUMENT_ROOT'].'/Picks/Redactor/';

$_FILES['file']['type'] = strtolower($_FILES['file']['type']);

if ($_FILES['file']['type'] == 'image/png'
|| $_FILES['file']['type'] == 'image/jpg'
|| $_FILES['file']['type'] == 'image/gif'
|| $_FILES['file']['type'] == 'image/jpeg'
|| $_FILES['file']['type'] == 'image/pjpeg'
|| $_FILES['file']['error'] == 0)
{
    // setting file's mysterious name
    $filename = md5(date('YmdHis')).'.jpg';
    $file = $dir.$filename;

    // copying
    chmod($dir, 777);
    move_uploaded_file($_FILES['file']['tmp_name'], $file);

    // displaying file
 $array = array(
  'filelink' => 'Picks/Redactor/'.$filename
 );

 echo stripslashes(json_encode($array));

}

2 ответа

Во-первых, это не имеет ничего общего с Redactor.

Вы получите эту ошибку наиболее вероятно, потому что каталог не существует. CHMOD не создает его.

Попробуй это

if (!file_exists($dir)) {
    //dir, rights, recursive
    mkdir($dir, 0777, true); //Maybe we need not that much permissions...
}

Вы уверены, Дир, что вы думаете?

var_dump($dir);

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

Узел сайта: Мы никогда не должны предоставлять права на исполнение для файлов, которые поступают от пользователя. Также обратите внимание, что MIME-тип не должен быть точным. Специально для изображений, getimagesize будет более надежным.

// This is a simplified example, which doesn't cover security of uploaded images.
// This example just demonstrate the logic behind the process.


// files storage folder
$dir = 'uploads/data/'; // or use '../uploads/data/' but not use '/uploads/data/'

$_FILES['file']['type'] = strtolower($_FILES['file']['type']);

if ($_FILES['file']['type'] == 'image/png'
|| $_FILES['file']['type'] == 'image/jpg'
|| $_FILES['file']['type'] == 'image/gif'
|| $_FILES['file']['type'] == 'image/jpeg'
|| $_FILES['file']['type'] == 'image/pjpeg')
{
    // setting file's mysterious name
    $filename = md5(date('YmdHis')).'.jpg';
    $file = $dir.$filename;

    // copying
    move_uploaded_file($_FILES['file']['tmp_name'], $file);

    $array = array(
        'filelink' => "/".$dir.$filename
    );

    echo stripslashes(json_encode($array));
    //print_r($_FILES['file']);

}
Другие вопросы по тегам