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

Форум PHP

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

 

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

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

тема: не создаются превьюшки при подключенной библиотеке gd
 
 автор: elenaki   (04.05.2007 в 23:09)   письмо автору
 
 

была у меня такая тема - никак не получался аплоад картинок на один сайт. и права на папку было не поменять, и даже phpinfo() не выводила ничего!

наконец заставили хостера изменить права на папку, подключить библиотеку, дать нам увидеть инфу про РНР...

удалось даже (о чудо!) загрузить файл непосредственно из скрипта.

на этом все и закончилось. скрипт должен не просто грузить фотки, а делать из них превьюшки и сохранять их с именем s_имя_фотки. но он этого не делает. скрипт ресайза - совершенно обычный, опробованный на разных серверах.

вот из него отрывок:


// Определяем размер изображения с помощью функции getimagesize: 
  $size = getimagesize(SOURCE); 
  // Функция getimagesize, требуя в качестве своего параметра имя файла, 
  // возвращает массив, содержащий (помимо прочего, о чем можно прочитать 
  // в документации), ширину - $size[0] - и высоту - $size[1] - 
  // указанного изображения. Кстати, для ее использования не требуется наличие 
  // библиотеки GD, так как она работает непосредственно с заголовками 
  // графических файлов. В случае, если формат файла не распознан, getimagesize 
  // возвращает false: 
  if ($size === false) die ('Bad image file!'); 

  // Читаем в память JPEG-файл с помощью функции imagecreatefromjpeg: 
  $source = imagecreatefromjpeg(SOURCE) 
    or die('Cannot load original JPEG'); 


я подставила die ('Bad image file!'); и or die('Cannot load original JPEG'); и мне тут же выдало обе эти ошибки (поочереди, конечно, потому что каждая завершает работу скрипта...)

чтобы это значило? почему не распознается ни формат файла, ни его размер? что еще требовать от хостера, если он уже подключил библиотеку? GD Version 1.6.2 or higher

   
 
 автор: Trianon   (04.05.2007 в 23:52)   письмо автору
 
   для: elenaki   (04.05.2007 в 23:09)
 

а там точно JPG? А то я видел как в файлах с расширением JPG лежат и BMP и GIF, и чего там только не лежит....
На самом деле, правильный дальнейший ход - выдать содержимое файла как application/octet-stream назад на клиент, и убедиться, что файл не искажен. И что в нем и вправду JPG.

Это первое. И второе - JPEGи бывают разные. Например, JPEGи c цветовой схемой CMYK вообще редко кто ест.

   
 
 автор: golovdinov   (05.05.2007 в 15:37)   письмо автору
 
   для: Trianon   (04.05.2007 в 23:52)
 

У меня, лично, при указании пути к изоображению (да и к шрифту) GD требует расширение с правильным регистром. Например, если у изоображения имя imge.JPG, то imagecreatefromjpeg("image.jpg") не работает. По крайней мере я точно помню что с подобным сталкивался.

   
 
 автор: Unkind   (05.05.2007 в 15:40)   письмо автору
 
   для: golovdinov   (05.05.2007 в 15:37)
 

Это потому что в UNIX-системах имена файлов зависят от регистра. У elenaki, кажется, Windows.

   
 
 автор: elenaki   (05.05.2007 в 15:52)   письмо автору
 
   для: Unkind   (05.05.2007 в 15:40)
 

да, там у клиента Windows-server.

jpg точно. и точно не CMYK, потому что я сама переделала эти фотки. да и в браузере они выдаются, только в огромном виде. т.е., читаются, копируются функцией copy(), не работает только getimagesize() и imagecreatefromjpeg(). имя файла правильное, я выводила его на экран. может, нет доступа к папке TEMP, где хранятся временные файлы?

   
 
 автор: Trianon   (06.05.2007 в 00:27)   письмо автору
 
   для: elenaki   (05.05.2007 в 15:52)
 

Так может они просто настолько велики, что в открытом виде не влезают в оперативную память?

   
 
 автор: elenaki   (06.05.2007 в 16:05)   письмо автору
 
   для: Trianon   (06.05.2007 в 00:27)
 

размер у них вполне нормальный - 60-70к (говорю же - обычным copy копируются!)

   
 
 автор: Unkind   (06.05.2007 в 16:09)   письмо автору
 
   для: Trianon   (06.05.2007 в 00:27)
 

getimagesize() вообще должно быть без разницы какой размер картинки. Считываются только первые несколько байт файла.

Ошибки вообще никакие не выдаются?

   
 
 автор: elenaki   (06.05.2007 в 16:19)   письмо автору
 
   для: Unkind   (06.05.2007 в 16:09)
 

if ($size === false) die ('Bad image file!'); посде этой строки выдается Bad image file. если die убрать, то выдается ошибка из следующей команды - Cannot load original JPEG. если и этот die убрать, то ошибок нет, но и уменьшенные копии не создаются.

   
 
 автор: Trianon   (06.05.2007 в 16:22)   письмо автору
 
   для: elenaki   (05.05.2007 в 15:52)
 

А что такое SOURCE В Вашем коде?

   
 
 автор: elenaki   (06.05.2007 в 16:32)   письмо автору
 
   для: Trianon   (06.05.2007 в 16:22)
 

это не мой код. код отсюда: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=29776. у меня точно такой же, просто не было die...
когда я подставила эти die, начали выдаваться ошибки. без die не было ничего.

   
 
 автор: Unkind   (06.05.2007 в 16:37)   письмо автору
 
   для: elenaki   (06.05.2007 в 16:32)
 

Вставьте в начало кода

<?php
error_reporting
(E_ALL);
ini_set("display_errors""on");
?>

   
 
 автор: elenaki   (06.05.2007 в 16:43)   письмо автору
 
   для: Unkind   (06.05.2007 в 16:37)
 

это есть. ошибок не выдает.

   
 
 автор: Roma   (06.05.2007 в 17:26)   письмо автору
 
   для: elenaki   (06.05.2007 в 16:43)
 

проверьте правильность ввода имени файла. у меня все работает

   
 
 автор: elenaki   (06.05.2007 в 17:38)   письмо автору
 
   для: Roma   (06.05.2007 в 17:26)
 

хех. я с этого начала. имя файла выводится. как бы он копировался, если б была ошибка в имени? и скрипт этот у меня работает на других серверах без проблем. а на этом, единственном, не желает. думаю, проблема в сервере. что-то они там запретили в php.ini и сами не знают, что. вот я и спрашиваю, что еще можно потребовать от хостера? может, старая версия библиотеки? может, нет доступа к временной папке?

есть еще счетчик, он использует ту же функцию - imagecreatefromjpeg() - значит, библиотека работает!


for($i=0; $i<5; $i++)   { //// всего может быть 5 фотографий
      
  if ($_POST["file"][$i] == "new") { /// если выбрано условие "Новая фотография"
  //echo $_FILES['photo_'.$i]['name']; exit;   /// тут имя файла выводит
  $size=getimagesize($_FILES['photo_'.$i]['name']); /// поля для выбора файлов называются photo_0, photo_1 и т.д.
  //echo $size; exit; /// тут размер уже не выводит
  if ($size === false) die ('Bad image file!');  /// тут выводит ошибку и останавливается
...
продолжение цикла
}


вот мой код. пробовала и с name и с tmp_name - ничего не делает.

   
 
 автор: Trianon   (06.05.2007 в 21:47)   письмо автору
 
   для: elenaki   (06.05.2007 в 17:38)
 

Вы хотите сказать, что на этом хостинге эта функция работает? И она по-разному относится к одному и тому же файлу - взятому из каталога и загруженному скриптом?
Тогда, похоже, дело в правах на временный каталог. А функцию move_uploaded_file(), перед тем, как трогать файл другими функциями, Вы применить пробовали? Я бы попробовал.

   
 
 автор: elenaki   (07.05.2007 в 16:28)   письмо автору
 
   для: Trianon   (06.05.2007 в 21:47)
 

move_uploaded_file() не делает ничего. ни ошибок не выдает, ни файлы не переносит. работает только copy().

заметила еще одну вещь - временные файлы создаются не на том диске, где находится сайт. папка TEMP - на диске С, а сам сайт - на D.

написала хостеру, чтоб проверил и дал доступ скриптам к папке ТЕМР на С. посмотрим, что ответит.

   
Rambler's Top100
вверх

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