Редактор загрузки изображений не работает
Сайт с редактором, работающим на поддомене. Он сообщает об ошибках: 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']);
}