Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: переименование файла при загрузке на сервер
 
 автор: frisst   (21.02.2010 в 13:46)   письмо автору
 
 

Тема не раз поднималась, но у меня без ошибок не получается.
взял я пример скрипта загрузки с вашего сайта (http://softtime.ru/scripts/upload.php)
скрипт замечательно работает, но мне нужно переименовывать файл при загрузке так как мне надо...
ну с генерацией имени всё хорошо. помогите дополнить код, чтобы он переименовывал файл, а потом загружал.

<?php
if ($_POST['gofile'] ) {
$allowed_filetypes = array('.jpg','.JPG','.Jpg','.gif','.GIF','.Gif','.bmp','.BMP','.Bmp','.png','.PNG','.Png'); // допустимые форматы.
$max_filesize 524288// Допустимый размер загружаемого файла.
$upload_path 'foto/'// Директория для загрузки.
$new_name "000001"// Новое имя для файла.(типа получено динамически =) )
$filename $_FILES['filename']['name'];
$ext substr($filenamestrpos($filename,'.'), strlen($filename)-1);
if(
strlen($_FILES['filename']['tmp_name']) < 1)
die(
'Сперва укажите файл для загрузки.');
if(!
in_array($ext,$allowed_filetypes))
die(
'Данный формат не поддерживается.');
if(
filesize($_FILES['filename']['tmp_name']) > $max_filesize)
die(
'Файл превышает допустимые значения.');
if(!
is_writable($upload_path))
die(
'Директория закрыта от записи. обратитесь к системному администратору.');
if(
move_uploaded_file($_FILES['filename']['tmp_name'],$upload_path $filename))
die(
'Ваш фаил успешно загружен. <a href="' $upload_path $filename '">смотреть</a><br> <a href="index2.php">загрузить ещё</a>'); 
else
echo 
'При загрузке возникли ошибки. Попробуйте ещё раз.';
}
?>


помогите пожалуйста. очень нужно.

  Ответить  
 
 автор: tvv123456   (21.02.2010 в 13:52)   письмо автору
 
   для: frisst   (21.02.2010 в 13:46)
 


<?
$filename 
$_FILES['filename']['name']; //эту строку замени на
$filename $new_name//вот эту Не забывай также, что тут необходимо все-таки указать расширение через точку

  Ответить  
 
 автор: frisst   (21.02.2010 в 14:03)   письмо автору
 
   для: tvv123456   (21.02.2010 в 13:52)
 

допустим сперва картинка в формате JPG была, я могу её переименовать в PNG, чтобы потом она открывалась?!

  Ответить  
 
 автор: tvv123456   (21.02.2010 в 14:05)   письмо автору
 
   для: frisst   (21.02.2010 в 14:03)
 

попробуйте, у меня получалось

  Ответить  
 
 автор: frisst   (21.02.2010 в 14:05)   письмо автору
 
   для: tvv123456   (21.02.2010 в 14:05)
 

спасибо. сейчас попробую...

  Ответить  
 
 автор: frisst   (21.02.2010 в 14:10)   письмо автору
 
   для: tvv123456   (21.02.2010 в 14:05)
 

Да! спасибо огромное!!!
работает!

<?php
// заменил
$filename $_FILES['filename']['name'];

// на
$namefile "$new_name".".jpg";
$filename $namefile;
?>

  Ответить  
 
 автор: tvv123456   (21.02.2010 в 14:33)   письмо автору
 
   для: frisst   (21.02.2010 в 14:10)
 

Зачем лишнию переменную создавать($namefile)? Можно новое имя сгенерировать сразу для $filename,

<?
$namefile 
"$new_name".".jpg";// Зачем переменную в кавычки брать?

  Ответить  
 
 автор: frisst   (21.02.2010 в 14:58)   письмо автору
 
   для: tvv123456   (21.02.2010 в 14:33)
 

а... спасибо...
сглупил...

  Ответить  
 
 автор: BISSON   (02.04.2010 в 22:38)
 
   для: tvv123456   (21.02.2010 в 14:33)
 

Иногда ПХП на сервере по-странному воспринимает файл. Точно не скажу, но, к примеру:
$a = 1;
$b = 2;

$sum = $a + $b;

if ($sum <= $b) {...} else {...}

Так вот, у меня были траблы, пока не написал вот так:
if ("$sum" <= "$b") {...} else {...}

  Ответить  
 
 автор: sim5   (03.04.2010 в 08:31)   письмо автору
 
   для: frisst   (21.02.2010 в 13:46)
 

Не стоит так загружать изображения на сервер.

  Ответить  
 
 автор: frisst   (03.04.2010 в 15:39)   письмо автору
 
   для: sim5   (03.04.2010 в 08:31)
 

А как вы посоветуете загружать файлы?

Да... этот скрипт "слабенький"... файлы с размером в 2-3 мегабайта уже не загружает...

  Ответить  
 
 автор: sim5   (03.04.2010 в 15:52)   письмо автору
 
   для: frisst   (03.04.2010 в 15:39)
 

Размер загружаемого файла не зависит от скрипта, а от разрешенного в соответствующих параметрах файла php.ini.
Обработку загруженного файла нужно начитать только при отсутствии ошибок при загрузке ($_FILES['filename']['error']), иначе при их наличии все остальные проверки бессмысленные.

$allowed_filetypes = array('.jpg','.JPG','.Jpg','.gif','.GIF','.Gif','.bmp','.BMP','.Bmp','.png','.PNG','.Png') - это слишком круто, существует функция strtolower(), если уж так проверять. Но с такой проверкой я гарантированно засыплю ваш сервер не изображениями, а мусором.

Здесь не однократно описывалась загрузка файлов на сервер, ищите и читайте.

  Ответить  
 
 автор: neadekvat   (03.04.2010 в 16:37)   письмо автору
 
   для: sim5   (03.04.2010 в 15:52)
 

Насколько я знаю, следует создавать изображения, а не перемещать их.
И вот тут то.. gd2 c bmp работать не умеет

  Ответить  
 
 автор: sim5   (03.04.2010 в 16:40)   письмо автору
 
   для: neadekvat   (03.04.2010 в 16:37)
 

Перемещать, не перемещать, дело десятое. А вот октрыть bmp файл в GD можно, лишь бы памяти хватило.

  Ответить  
 
 автор: neadekvat   (03.04.2010 в 17:05)   письмо автору
 
   для: sim5   (03.04.2010 в 16:40)
 

Когда пользователь загружает изображение, я не само изображение сохраняю, а создаю его копию. Вот как раз функции, грубо говоря, "создать из bmp" я не нашел, из джипега, джифа - да.

  Ответить  
 
 автор: sim5   (03.04.2010 в 18:24)   письмо автору
 
   для: neadekvat   (03.04.2010 в 17:05)
 

Открыть в GD можно любой формат изображения, если знать структуру этого файла. Ну а далее, в цикле, с помощью unpack() получаем цвет каждого пикселя bmp-изображения и копируем его в открытый gd-ресурс. Затем сохраняем ресурс в любом веб-формате. Вот как преобразовать 24- и 32-битные bmp-изображения:
<?
function bmpconvert($filename) {
  
//читаем заголовок изображения
  
$bmp unpack('VbiSize/VbiWidth/VbiHeight/vbiPlanes/vbiBitCount'.
                
'/VbiCompression/VbiSizeImage'fread($filename,24));
  
//получаем структуру изображения
  
$im fread($filename,$bmp['biSizeImage']);
  
//создаем ресурс
  
$res imagecreatetruecolor($bmp['biWidth'],$bmp['biHeight']);
  
$off 0//смещение на пиксель в структуре
  
$alph chr(0);
  
$Y $bmp['biHeight']-1;
  while (
$Y >= 0) {
    
$X=0;
    while (
$X $bmp['biWidth']) {
      
//получаем цвет пикселя
      
$color unpack("V",substr($im,$off,3).$alph);
      
//устанавливаем пиксель ресурса
      
imagesetpixel($res,$X,$Y,$color[1]);
      
$X++;
      
$off += $bmp['biBitCount'];
    }
    
$Y--;
  }
  
//сохраняем
  
imagejpeg($res,'filename.ext',compress);
  
imagedestroy($res);
}

  Ответить  
 
 автор: neadekvat   (03.04.2010 в 18:31)   письмо автору
 
   для: sim5   (03.04.2010 в 18:24)
 

Спасибо за функцию =)

Как же я много еще не знаю

  Ответить  
 
 автор: sim5   (03.04.2010 в 18:47)   письмо автору
 
   для: neadekvat   (03.04.2010 в 18:31)
 

Не я автор (первопроходец) этого, есть класс, название которого я точно к сожалению не помню, но есть в нем слово upload. К сожалению в нем не все типы bmp-файла обрабатываются, поэтому источник пришлось править. Это просто корректный кусочек из него. Чистого же исходника уже нет. Ну а сам подход к решению вопроса вполне естественный, но затратный, и при больших размерах исходного изображения...

  Ответить  
 
 автор: neadekvat   (03.04.2010 в 19:18)   письмо автору
 
   для: sim5   (03.04.2010 в 18:47)
 

И тут в моей голове щелкнуло, когда-то я на него набредал. Это?

  Ответить  
 
 автор: sim5   (03.04.2010 в 19:21)   письмо автору
 
   для: neadekvat   (03.04.2010 в 19:18)
 

Возможно, трудно сказать. Скачайте, посмотрите.

  Ответить  
 
 автор: Trianon   (03.04.2010 в 19:59)   письмо автору
 
   для: sim5   (03.04.2010 в 18:47)
 

настолько затратный, что для практического применения лучше раскопать что-то вроде imagemagic и применить его в качестве "моста" форматов.

  Ответить  
 
 автор: sim5   (03.04.2010 в 20:02)   письмо автору
 
   для: Trianon   (03.04.2010 в 19:59)
 

При больших размерах ВМР в любом случае кушать много будет.
Можно и вышеприведенным меньше памяти потреблять, если считывать не весь файл, а читать построчно его структуру. А вообще, зачем он нужен этот ВМР... )

  Ответить  
 
 автор: neadekvat   (03.04.2010 в 20:35)   письмо автору
 
   для: sim5   (03.04.2010 в 20:02)
 

Раньше выдавал ошибку дескать "Изображение имеет недопустимый формат (.bmp)"
Видимо, несмотря на рабочу функцию, лучше не изменять привычкам - дороже обойдется?

  Ответить  
 
 автор: sim5   (04.04.2010 в 00:09)   письмо автору
 
   для: neadekvat   (03.04.2010 в 20:35)
 

Кто выдавал?

  Ответить  
 
 автор: neadekvat   (04.04.2010 в 01:14)   письмо автору
 
   для: sim5   (04.04.2010 в 00:09)
 

Я выдавал, при попытке загрузить картинку в формате bmp =)

  Ответить  
 
 автор: sim5   (04.04.2010 в 01:27)   письмо автору
 
   для: neadekvat   (04.04.2010 в 01:14)
 

Ясно. Ну а кто будет забрасывать на сервер ВМР? Цифровые мыльницы, так они в JPEG формате пишут. Профессиональные камеры, это RAW, TIFF. Ну может кто-то по не знанию отыщет у себя картинку ВМР формата - нельзя и точка. Превращать сайт в конвертор, так это тогда сервис такой делать, и не только ВМР, иначе зачем это нужно.

  Ответить  
 
 автор: Trianon   (03.04.2010 в 20:43)   письмо автору
 
   для: sim5   (03.04.2010 в 20:02)
 

>При больших размерах ВМР в любом случае кушать много будет.
Всяко не больше, чем то же изображение в GD...

>Можно и вышеприведенным меньше памяти потреблять, если считывать не весь файл, а читать построчно его структуру.
Построчно это медленно - строки там идут во встречном порядке. А побуферно - вполне себе.
Собственно, нормальные пакетные реализации имено так форматы и преобразуют.

>А вообще, зачем он нужен этот ВМР... )
Это уж кому зачем :))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования