- 1
- 2
$uploaddir = '../images/';
$uploadfile1 = $uploaddir . basename($_FILES['img']['name']);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+144.8
$uploaddir = '../images/';
$uploadfile1 = $uploaddir . basename($_FILES['img']['name']);
все те же индусы
учите матчасть!
Опять же.. я не php'ист.. такое наблюдал в Perl'e - на одной и той же странице с одним и тем же браузером в $q->param('img') в одном случае был полный путь, в другом название
Так что в данном случае возвращает с расширением. Учи матчать, guest!
возвращает только имя файла, basename - здесь вообще не нужен. В этом
то и ошибка.
Мде? А почему тогда на официальном сайте PHP, в официальном описании работы с аплоадом файлов, basename таки используется? Наверное, это ж-ж-ж-ж неспроста?
http://ru2.php.net/manual/en/features.file-upload.post-method.php
<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
(хвост поскипан)
Из-за таких вот горе-оптимизаторов, выкидывающих "ненужные" функции, потом у людей веб-интерфейсы не работают. Резюме: код хороший, автор - говно.
ты сначала проверь, а потом пиши что-то.
Спишем хамство на альтернативную одаренность автора.
> ты сначала проверь, а потом пиши что-то.
Видишь ли, в поле "name" содержится ровно то, что прислал тебе клиент. Надеяться, что клиент тебе всегда будет слать именно голое имя файла, без путей - ламеризм чистой воды. Этого факте не отменяет даже то, что ты проверил на последнем файрфоксе и опере, и у тебя все работает. :)
и подставляет его в ['name']?
Юный обличитель сейчас будет обличать этих тупых критиканов, да? :) Не получится.
PHP 5.2.10 - путь стрипает.
PHP 4.1.x - не стрипает, с чем мне в свое время пришлось поиметь немало веселых часов.
А тот, кто пишет под конкретную версию PHP, рискует поиметь многие часы геморроя при поддержке собственного кода.
загружать надо под другим именем это 2ое.
Ах вот оно что! Ну наконец-то пришел ты и открыл всем глаза!
Народ, на самом деле функция basename не нужна! Просто если пользователю не удалось загрузить файл, ему нужно просто загрузить файл под другим именем. Это же очевидно, до этого любой ламер додумается!
А еще пользователю желательно сменить браузер. А если это невозможно - ему нужно вручную сформировать HTTP-запрос и отослать его на сервер (делов-то!).
Спасибо тебе, getme, просветил так просветил. Зато мы избавимся от гадкой, никому не нужной функции basename (анафема!) и сэкономим аж 16 микросекунд процессорного времени.
Еще раз повторю: горе-оптимизаторов надо стрелять. Вместо того, чтобы написать надежный код (пусть и излишний в чем-то именно для данных настроек сервера), оптимизатор включает "смекалку" и убирает все проверки. Да и пофиг, что дыра на дыре - зато у него работает! Он, блин, проверял.