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

Разное

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

 

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

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

тема: IIS и imagejpeg
 
 автор: DJ Paltus   (16.01.2013 в 13:30)   письмо автору
 
 

Скрипт создает картинку на сайте. Но при попытке доступа к ней сервер (IIS) говорит "401" и шлет всех лесом.
Где что и как настроить, чтобы хватало www-пользователю прав на поглядеть этот файл?

  Ответить  
 
 автор: cheops   (16.01.2013 в 20:27)   письмо автору
 
   для: DJ Paltus   (16.01.2013 в 13:30)
 

Аналогичный скрипт рядом, выдающий Hello world, возвращает код 200?

  Ответить  
 
 автор: DJ Paltus   (16.01.2013 в 20:46)   письмо автору
 
   для: cheops   (16.01.2013 в 20:27)
 

Пустой скрипт с эхой? Выдает что надо.
http://korund-s.ru/new/catphotos/hw.php - хелло ворлд
http://korund-s.ru/new/catphotos/87e5677723439002eb9dd201507bb651.jpg - картинка

  Ответить  
 
 автор: cheops   (16.01.2013 в 21:19)   письмо автору
 
   для: DJ Paltus   (16.01.2013 в 20:46)
 

А нигде правила нет, запрещающего доступ к изображениям .jpg? Попробуйте рядом положить статичную картинку? 401 обычно отдается, когда запрещено в конфигурационных файлах обращаться к ресурсу.

  Ответить  
 
 автор: DJ Paltus   (16.01.2013 в 23:37)   письмо автору
 
   для: cheops   (16.01.2013 в 21:19)
 

http://korund-s.ru/new/catphotos/test.jpg - это то же самое изображение, скопированное оттуда по ftp, и обратно.
тут и дочерняя директория есть, там тоже картинки читаются.
насчет правил не знаю, их админ будет доступен завтра. Да и он не вполне копенгаген.

И я неточно выразился в самом начале. Скрипт создает и сохраняет картинку в файл. То есть, это не динамическая картинка, она просто не копированием, а функцией gdlib создана.

  Ответить  
 
 автор: cheops   (17.01.2013 в 21:32)   письмо автору
 
   для: DJ Paltus   (16.01.2013 в 23:37)
 

Тогда скрипт выкладывайте, какие HTTP-заголовки отправляете?

  Ответить  
 
 автор: DJ Paltus   (17.01.2013 в 23:16)   письмо автору
 
   для: cheops   (17.01.2013 в 21:32)
 

Игорь, нету там заголовков...

<?
function resize($file$small$r ){ //входной файл, имя будущего, размер по большему краю
    
$img getimagesize($file);
//тут всякие вычисления по поводу того, какое измерение считать главным
    
$w $h $r;
    
$s $img[1] / $img[0];
    if (
$r $s)
        
$w $r $s;
    else
        
$h $r $s;
//и дальше пошли создавать новую картинку
    
$dest imagecreatetruecolor($w$h);
    
$white imagecolorallocate($dest255255255);

    
$src imagecreatefromjpeg($file);

    
imagecopyresampled($dest$src0000$w$h$img[0], $img[1]);
//и вот тут файл создается
    
imagejpeg($dest$small100);

    
imagedestroy($dest);
    
imagedestroy($src);
    return 
true;
  }
?>

Вот эта функция делает миникопию изображения. На никсовых серверах вопросов вообще не возникает. На виндовых какое-то ощущение, что файл не закрыт.

  Ответить  
 
 автор: cheops   (18.01.2013 в 07:24)   письмо автору
 
   для: DJ Paltus   (17.01.2013 в 23:16)
 

А вы отправьте Content-type явно, Apache может и подставляет заголовок по умолчанию, IIS может этого не делать.

  Ответить  
 
 автор: DJ Paltus   (18.01.2013 в 13:16)   письмо автору
 
   для: cheops   (18.01.2013 в 07:24)
 

Я не понимаю. А как, и главное, куда отправлять заголовок при простом сохранении файла функцией imagejpeg?

  Ответить  
 
 автор: cheops   (19.01.2013 в 09:58)   письмо автору
 
   для: DJ Paltus   (18.01.2013 в 13:16)
 

В файле, где вызываете эту функцию или прямо в самой функции вызовете
<?php
header
('Content-type: image/jpeg');
?>

  Ответить  
 
 автор: DJ Paltus   (21.01.2013 в 13:28)   письмо автору
 
   для: cheops   (19.01.2013 в 09:58)
 

Всё не так оказалось, меня осенило ночью, когда я выносил мусор в пургу. Проблема была не с imagejpeg().

Когда работаешь с IIS, следует в php.ini явно указывать недефолтную temp-директорию, желательно принадлежащую ветви файлового дерева, где лежат серверные директории (ну или набор прав вссоздать), иначе при загрузке файла он попадает в %WINDIR%/temp, откуда move_uploaded_file() его достает с хреном моржовым вместо www-прав.

For those using PHP on Windows and IIS, you SHOULD set the "upload_tmp_dir" value in php.ini to some directory around where your websites directory is, create that directory, and then set the same permissions on it that you have set for your websites directory. Otherwise, when you upload a file and it goes into C:\WINDOWS\Temp, then you move it to your website directory, its permissions will NOT be set correctly. This will cause you problems if you then want to manipulate that file with something like ImageMagick's convert utility.

Спасибо, Игорь, за потраченное время )

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

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