Почему не загружаются файлы на сервер (PHP)?

Стоит чистая операционка, ubuntu 14.04. Стоит apache + php5. На сайте стоит обычная форма:

<form name="contact-from" id="contact-form" action="" method="post" enctype="multipart/form-data">
<input style="display: flex;align-items: center;height: auto;padding: 15px 10px;" name="photo" type="file" class="input-full main-input required,email" placeholder="Фотография">
<button class="button-primary pull-right" type="submit" style="border:none;">
</form>


На сервере стоит обработчик:

$_FILES['photo']['name'] = strtolower($_FILES['photo']['name']);
$_FILES['photo']['tmp_name'] = strtolower($_FILES['photo']['tmp_name']);
$allow = array("jpg", "jpeg", "png", "gif");
$ext = substr($_FILES['photo']['name'], stripos($_FILES['photo']['name'], ".") + 1);
if(array_search($ext, $allow) !== false){
	$fname = md5(date("d.m.Y H:i:s") . rand(0, 100000) . $_FILES['photo']['name']);
		if(move_uploaded_file(realpath(dirname($_FILES['photo']['tmp_name'])), DIR . "/uploads/feedbacks/" . $fname . "." . $ext)){
			$photo = $fname . "." . $ext;
		}
}


Файл на сервер приходит, ошибок в файле нет на входе, после "move_uploaded_file" ошибок тоже нет. При этом, файл не загружается в нужную директорию. Права на все временные папки уже выставит в 777, права на папку, в которую загружаются файлы, выставил 777. В php.ini загрузка разрешена, максимальный размер файлов не превышаю, максимальный размер post запроса не превышаю.

Пытался загрузить вот таким способом:

$file = file_get_contents($_FILES['photo']['tmp_name']);
file_put_contents(DIR . "/uploads/feedbacks/" . $fname . "." . $ext, $file);


Выдает ошибку, пишет, что нет такого файла во временной директории. При этом, очень редко(может 1 из 50, а может и реже) файл загружается. Я уже сломал всю голову, после изменения php.ini перезагружал апач. Группы пользователей пытался менять везде у папок. В чем может быть проблема ?

UPD: В скрипте в конце прописал "sleep(60)" и посмотрел создается там файл вообще или нет, так вот, он создается, но с правами 600, на файле стоит юзер и группа "www-data".

UPD2: Поставил в апаче запуска от юзера, которому принадлежит каталог с временной директорией, так же группу указал нужную. Результат это не дало.

UPD3: Скачал временный файл, который пришел на сервак, залил его во временную директорию, выставил права, как на оригинале, выставил владельца и группу, как на оригинале - файл читается прекрасно.
  • Вопрос задан
  • 5359 просмотров
Решения вопроса 1
volfing
@volfing Автор вопроса
В общем, вышло очень тупо.
$_FILES["photo"]["tmp_name"] = strtolower($_FILES["photo"]["tmp_name"]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
проверь какие права у апача, и какая у него группа, возможно апач не имеет прав нужных, хотя папка и с правами 777, хз, все равно проверь.
Включи вывод ошибок и варнингов, если не включены. Возможно ошибки есть, но они подавляются.
Попробуй просто перекинуть файл, не меняй ему название, перекинь хоть то что пришло.
Пока более умных идей не пришло.

UPD: папку укажи с абсолютным путем от document_root.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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