Upload картинок или странный хостинг мне попался ;-)

kompo

Guest
Upload картинок или странный хостинг мне попался ;-)

Всем добрый день..

После нажатия Submit в форме, где человек добавляет картинку, шла проверка:
PHP:
if (file_exists ($p_name))
{
...
}
else 
{
файла нет..
}
И все всегда работало хорошо и вдруг на новом хостинге вышла у меня заминка. file_exists всегда возвращает true. То есть если набрать в имени файла что-нибудь от балды, то он это добавит..

Посмотрев что же происходит потом, я увидел, что php сам создает эти файлы от балды и потом копирует их пустыми в каталог с картинками.. Чего никогда на других хостингах не происходило. Ничего не создавалось и он прямо говорил - нет, парень, такого файла...

И расстерялся я ;-) Есть два варианта - так и надо и надо смотреть не file_exists, а размер файла. Так не надо и ... не знаю что ;-)


ы?
 

Апокалипсис

Guest
if($HTTP_POST_FILES['tmp_name']=='none')
{
echo "Нет файла";
}
 

kompo

Guest
Автор оригинала: Апокалипсис
if($HTTP_POST_FILES['tmp_name']=='none')
{
echo "Нет файла";
}
А вот не бывает там none никогда.
В том и проблема, наверное...

Если поле формы оставляется пустой, то tmp_name тоже пустое. Если там что-то от себя - то там какое-то реальное имя, типа /tmp/phptx1BC5.
 

Апокалипсис

Guest
сделай
PHP:
print_r($HTTP_POST_FILES)
при аплоде но без файла и посмотри что даст тебе tmp_name
 

kompo

Guest
Автор оригинала: RomikChef
Ну и в чем тогда проблема?
Чем тебя такая проверка не устраивает?
а если там написать что-нибудь (заведомо несуществующий файл на локальном диске), то он его создаст пустым и скопирует мне в директорию с картинками.

я задаюсь вопросом, почему он так не делал раньше...

Я соорудил проверку на размер (то есть в моем случае это $p_name_size), но проблема меня все равно мучает... почему не хочет работать по-старому..
 

RomikChef

Guest
проверять, что тебе прислали, с помощью [m]getimagesize[/m], надо всегда и в любом случае, независимо от того, как работает аплоад.
 

kompo

Guest
Автор оригинала: Апокалипсис
сделай
PHP:
print_r($HTTP_POST_FILES)
при аплоде но без файла и посмотри что даст тебе tmp_name
Array ( [p_name] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )
 

alpes

Весь мир на ладони
При аплоаде лучше использовать массив $_FILE:
_FILES["userfile"] Array
(
[name] => "имя загружаемого файла"
[type] => "тип переданного файла"
[tmp_name] => "физический путь к временному загруженному файлу"
[size] => "размер загруженного файла"
)

Я обычно делаю проверку тового что грузили так:
PHP:
if(!$_FILES["userfile"]["name"] || $_FILES["userfile"]["size"]==0) echo "файла нет";
где "userfile" имя из твоей формы Upload
В твоем случае надо проверять:
PHP:
if(file_exists($_FILES["userfile"]["tmp_name"])
//можешь в иф добавить $_FILES["userfile"]["name"] и $_FILES["userfile"]["size"]==0
//хотя что-то глючи - пинай хостера
{
 copy($_FILES["userfile"]["tmp_name"],$_SERVER["DOCUMENT_ROOT"].$GlimpseDir.$_FILES["userfile"]["name"]);
}
else
{
 echo "файла нет";
}
 

kompo

Guest
Дабы завершить...

Возможно, это связано с изменениями в самом php. На хостинге стоит 4.2.1. И как раз в нем есть:

Changed HTTP upload code to accept 0 byte file uploads. (Zeev)

Может быть, поэтому по старинке у меня сделать не получилось...

Но так или иначе добавив проверку на размер - все адекватно. Всем спасибо :)
PHP:
if ($HTTP_POST_FILES["p_name"]["tmp_name"] and $HTTP_POST_FILES["p_name"]["size"]>0)
 
Сверху