[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файлов по скрипту на сайт
Гость_Александр
Здравствуйте!

Возникла проблема с загрузкой файла через скрипт на сайт на hut.ru.
Форма для отправки включает следующий код:

<form action='upload_user.php' method='post' enctype='multipart/form-data'>
<input
name='qq' type='hidden' value='000000'><input name='compressing_auto' type='hidden' value='1'>
<input
type='file' name='filename' size='62'><br>
<sup
style='color:#FFFFFF;'>Заголовок работы</sup><br><input name='img_header' type='text' size='74'><br>
<sup
style='color:#FFFFFF;'>Описание работы</sup><br><textarea name='img_comment' cols='56' rows='5' id='description'></textarea><br>
<label
class='auth'>Просмотр только для авторизованных пользователей:</label><input name='close_flag' type='checkbox'><br>
<input
type='submit' style='width:109px' value='Загрузить'>
</form>


Принимающий код (до него дело не доходит, можно хоть закоментировать).

<?php
if($_FILES["filename"]["size"] > 1024*3*1024) echo ("<p>Размер файла превышает 3 Mb</p>");
else
{
switch($_FILES["filename"]["type"])
{
case ("image/jpeg"):
$fil_ext='jpg';
break;
case ("image/gif"):
$fil_ext='gif';
break;
}
if(isset($_POST['close_flag'])) $close=1;
else $close=0;
$img_header=$_POST['img_header'];
$img_description=$_POST['img_comment'];
$to_date = date("Y-m-d");
$result = mysql_query("INSERT INTO img (file_ext,user_own,date,header,comment,close) VALUES ('$fil_ext','$upload_user','$to_date','$img_header','$img_description','$close')",$db);
$file_id_num=mysql_insert_id();
if(copy($_FILES["filename"]["tmp_name"], "images/".$upload_user."_".$file_id_num.".".$fil_ext))
{
echo("<p>Файл успешно загружен <br>");
echo("Характеристики файла: <br>");
echo("Имя файла: ");
echo($_FILES["filename"]["name"]);
echo("<br>Размер файла: ");
echo($_FILES["filename"]["size"]);
echo("<br>Каталог для загрузки: ");
echo($_FILES["filename"]["tmp_name"]);
echo("<br>Тип файла: ");
echo($_FILES["filename"]["type"]);
echo("</p>");
include("engine/compressor/action.php");
}
else echo("<p>Ошибка загрузки файла!</p>");
}
?>


При выполнении POST'a до принимающего скрипта дело не доходит (его можно целиком закоментировать – ничего не изменится), выводится ошибка Internal Server Error 500.

Если убрать enctype='multipart/form-data', то ошибка не возникает, но принимающий скрипт, не получив файла, просто уходит по ветке "файл отправлен неудачно".

В error.log записываются две строки:

+%A, %B %d, %Y at %T (%Z): not found
+%D %T %Z: not found

Через phpinfo(); получил file_uploads On/On, upload_max_filesize 2M/2M, а вот
upload_tmp_dir no value/no value.

Прописать в .httaccess "php_value upload_tmp_dir /home/a/agevs.hut.ru/WWW/tmp/" не даёт, сайт вообще перестаёт грузится.

Подскажите, пожалуйста, где мой косяк?
Заранее спасибо!



Спустя 1 час, 18 минут, 3 секунды (12.01.2010 - 19:54) ИНСИ написал(а):
Гость_Александр мне кажется проблема не в твоем скрипте или форме, код
Internal Server Error 500 - Ошибка в конфигурации сервера или внешней программы. Так что, ищи в направлении этого.

Больше помочь не могу, потому что не сталкивался с таким sad.gif

Спустя 3 минуты, 31 секунда (12.01.2010 - 19:57) ApuktaChehov написал(а):
А что за сервер Apach, IIS или др?
Обычно 500 ошибка выскакивает когда PHP прикручен к серверу как CGI приложение. Грабли тут в том, что если ты не знаешь этого, то обычная синтаксическая ошибка PHP выдает 505 ошибку и становтся страшно.

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

Я написал 505 ошибку? Оп, пардон, поправляюсь..

Спустя 36 секунд (12.01.2010 - 19:58) ИНСИ написал(а):
Гость_Александр кстати, нашел вот это, может понадобится smile.gif

Про Internal Server Error 500

Спустя 1 час, 33 минуты, 45 секунд (12.01.2010 - 21:32) Гость_Александр написал(а):
Сервер Apach. Локально (денвере) не ругается.

Что-то подсказывает, что проблема возникает в момент загрузки файла во временную директорию, потому что если убрать enctype='multipart/form-data',
то POST проходит. В базу данных заносится описание к файлу, название и т.д.
А вот сам файл негде не появляется. Стоит добавить enctype, как сервер сталкивается с загрузкой файла и...

+%A, %B %d, %Y at %T (%Z): not found
+%D %T %Z: not found

А вот не имея доступа к php.ini, можно как-то прописать временную папку в лоб, в самом PHP коде как "параметр" к форме с методом POST? Вот, мол, сохрани его сюда сразу, как во временную папку.

Спустя 4 минуты, 10 секунд (12.01.2010 - 21:36) Guest написал(а):
welbox2, спасибо. Но этот гад-сервер менее информативен в своих логах, чем в приведённом описании smile.gif А доступ да, настроил. Без толку.

Спустя 14 минут, 36 секунд (12.01.2010 - 21:50) ИНСИ написал(а):
Guest у тебя видно upload_tmp_dir, неверно кажется. Проверил у себя, у меня стоит совсем другое, такое: /tmp.

если файл .htaccess ругается, попробуй прописать в самом скрипте, вот это:

$uploaddir = "/home/a/agevs.hut.ru/WWW/tmp/";
$uploadfile = $uploaddir . $upload_user . '_' . $file_id_num . '.' . $fil_ext;

if(move_uploaded_file($_FILES["filename"]["tmp_name"], $uploadfile)) {
.......
}






Спустя 2 часа, 22 минуты, 4 секунды (13.01.2010 - 00:12) Гость_Александр написал(а):
[php]<?php
if (empty($_FILES["myfile"]["name"])) {
?>
<html>
<head>
<title>Загрузка изображения</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<div id="imageId">Здесь должно появится изображение</div>
<iframe name="myIframe" style="display: none;"></iframe>
<br>
<form method="post" action="" enctype="multipart/form-data" target="myIframe">
<input type="file" name="myfile">
<input type="submit" value="Отправить">
</form>
</body>
<?php
}
else {
$uploadfile = "/tmp/123.jpg";
move_uploaded_file($_FILES["myfile"]["tmp_name"],$uploadfile);
echo <<<HEREDOC
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script type="text/javascript">
parent.document.getElementById("imageId").innerHTML = '<img src="/tmp/123.jpg" alt="Мое изображение!">';
</script>
</head>
</html>
HEREDOC;
}
?>[/php

Попробовал по Вашему совету попробовать через move_upload_file и пути...
Опять же, вместо картинки выводит 500...

Скорее всего с этим какие-то проблемы на хостинге. Ладно...

В любом случае, спасибо за помощь smile.gif

Спустя 11 дней, 17 часов, 28 минут, 15 секунд (24.01.2010 - 17:41) sir2009 написал(а):
1. Надо подправить путь куда копировать файл, так чтоб он стал абсолютным.
if(copy($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/images/".$upload_user."_".$file_id_num.".".$fil_ext))

2. Форма обязательно должна быть enctype="multipart/form-data" иначе она не сможет отправить файл.

3. Закомментируй все строки в .htaccess. Ошибка 500 может возникать если указывать здесь неразрешенные директивы.

4. Запись в базу MySQL я бы перенес после копирования файла. Кстати, не увидел подключения к БД.

5. Заморачиваться временной папкой не стоит, так как PHP сам должен знать где она и как ее зовут.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.