Помогите пожалуйста с переименовкой файла после загрузки

BeatBox

Guest
Помогите пожалуйста с переименовкой файла после загрузки

Здравствуйте, у меня есть такой код:
PHP:
 if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    $realname = $_FILES['userfile']['name'];
    $res = copy($_FILES['userfile']['tmp_name'], "i/news/$realname");
    $pictogram = $realname;
    }
уже столько мучаюс, никак немогу сделать чтобы когда файл закачиваеться на сервер, его бы переименовывало сразу, давая имя
$sid
Я просто или чего-то непонимаю, или руки кривые до ужаса (хотя, по-моему и то и другое сразу :confused: )
И, если не тяжело - было бы неплохо если бы в этот код можно было бы вставить самую простую проверку - если файл не *.PNG то die(); или просто не загружать..
Буду премногоблагодарен!
 

neko

tеam neko
> вставить самую простую проверку - если файл не *.PNG то die();
> или просто не загружать..

[m]getimagesize[/m]

> уже столько мучаюс, никак немогу сделать чтобы когда файл
> закачиваеться на сервер, его бы переименовывало сразу, давая
> имя
> $sid

это что за имя такое?
 

Фанат

oncle terrible
Команда форума
я что-то не понял
а где здесь в этом коде $sid?

-~{}~ 19.03.05 09:51:

Еврей приходит в синагогу и начинает молиться Богу:
- Господи, ну помоги мне выиграть в лотерею. Вон, Моня телевизор выиграл, Розочка стиральную машину, а ребе Шендерович - вообще «Волгу». А я ничего, никогда не выигрывал. Ну, Господи, сделай так, шоб я хоть шо-нибудь выиграл!
На небесах все слушают мольбы бедного еврея, всем его дико жалко, все смотрят на Бога, видят что тот ничего не предпринимает. Моисею стало жалко бедного еврея больше всех, он и говорит Богу:
- Господи, ну ты что, не видишь, как он просит? Тебе что, трудно сделать так, чтоб он выиграл в лотерею? Это ж пара пустяков!
Бог разводит руками и говорит:
- Думаешь, я сам не хочу ему помочь? Но пусть же он хотя бы купит лотерейный билет!
 

leхus

Guest
ну для начала проще сделать так:
Код:
 $realname = "i/news/".$_FILES['userfile']['name'];
ну и тогда :
Код:
$res = copy($_FILES['userfile']['tmp_name'], $realname);
а нащет имени щас из книжки процитирую:
Код:
if(ereg("^(.*)\\.(gif|jpg|jpeg|png|bmp)$",$file['name']))
тока для твоего случая $file['name'] будет $_FILES['userfile']['tmp_name'] и соответсвенно итог:
Код:
if(ereg("^(.*)\\.(png)$",$_FILES['userfile']['tmp_name']))
-~{}~ 19.03.05 11:03:

ой, точнее проверять ereg`ом pmp_name бесполезно, проверяй реал нэйм, воть. А если не подходить - делете
 

BeatBox

Guest
Спасибо большое за ответы!
а как перименовать в $sid? тоесть - эта переменная генеируеться немного раньше, и мне нужно чтобы картинку переименовывало. Это будет порядковый номер. Тоесть $sid - это цыфры.
 

Фанат

oncle terrible
Команда форума
BeatBox
скажи, ты настолько не понимаешь, что ты делаешь?
и совсем-совсем не понимаешь, что в строчке
$res = copy($_FILES['userfile']['tmp_name'], "i/news/$realname");
надо вместо $realname написать $sid?
 

SelenIT

IT-лунатик :)
Видимо, использовать $sid вместо $realname при генерации пути назначения. Хотя бы так:
PHP:
$res = copy($_FILES['userfile']['tmp_name'], "i/news/$sid.png");
И еще, ИМХО при upload-е файлов вместо copy лучше использовать [m]move_uploaded_file[/m].
 

BeatBox

Guest
Впринципе все работает. но толькон емогу никак сделать чтобы он загружал только файлы PNG (хотя если я правильно понял - даже если мне через эту форму недобросоветсный помощник админа зальет хот *.php или какой-нить эксплойт, то всеравно он будет переименован в .png и опастности не предоставит... или я ошибаюсь?
ВОт сам код:
PHP:
$resultid = $db->sql_query("SELECT MAX(sid) AS sid FROM ".$prefix."_stories");
    $rowid = $db->sql_fetchrow($resultid);
    $sid_id2 = intval($rowid['sid']);
    $sid_id = ($sid_id2+1);
    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    $realname = "i/news/".$_FILES['userfile']['name'];
    $res = move_uploaded_file($_FILES['userfile']['tmp_name'], "i/news/$sid_id2.png");
    $pictogram = "$sid_id2.png";
    }
 

SelenIT

IT-лунатик :)
Понял правильно. И код рабочий, только было бы лучше, если бы ты немного его обдумывал: ;)
1) Если поле sid в таблице и так числовое, незачем intval;
2) переменная $realname больше нигде не используется и, видимо, уже не нужна;
3) $sid_id тоже не используется - зачем она?
4) Если ты все равно собираешь имя файла в $pictogram, почему бы не использовать ее в move_uploaded_file?
PHP:
$resultid = $db->sql_query("SELECT MAX(sid) AS sid FROM ".$prefix."_stories");
$rowid = $db->sql_fetchrow($resultid);
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
    $pictogram = $rowid['sid'].".png";
    $res = move_uploaded_file($_FILES['userfile']['tmp_name'], "i/news/".$pictogram);
}
 
Сверху