|
|
|
| Скрипт создает картинку на сайте. Но при попытке доступа к ней сервер (IIS) говорит "401" и шлет всех лесом.
Где что и как настроить, чтобы хватало www-пользователю прав на поглядеть этот файл? | |
|
|
|
|
|
|
|
для: DJ Paltus
(16.01.2013 в 13:30)
| | Аналогичный скрипт рядом, выдающий Hello world, возвращает код 200? | |
|
|
|
|
|
|
|
|
для: DJ Paltus
(16.01.2013 в 20:46)
| | А нигде правила нет, запрещающего доступ к изображениям .jpg? Попробуйте рядом положить статичную картинку? 401 обычно отдается, когда запрещено в конфигурационных файлах обращаться к ресурсу. | |
|
|
|
|
|
|
|
для: cheops
(16.01.2013 в 21:19)
| | http://korund-s.ru/new/catphotos/test.jpg - это то же самое изображение, скопированное оттуда по ftp, и обратно.
тут и дочерняя директория есть, там тоже картинки читаются.
насчет правил не знаю, их админ будет доступен завтра. Да и он не вполне копенгаген.
И я неточно выразился в самом начале. Скрипт создает и сохраняет картинку в файл. То есть, это не динамическая картинка, она просто не копированием, а функцией gdlib создана. | |
|
|
|
|
|
|
|
для: DJ Paltus
(16.01.2013 в 23:37)
| | Тогда скрипт выкладывайте, какие HTTP-заголовки отправляете? | |
|
|
|
|
|
|
|
для: 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($dest, 255, 255, 255);
$src = imagecreatefromjpeg($file);
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $img[0], $img[1]);
//и вот тут файл создается
imagejpeg($dest, $small, 100);
imagedestroy($dest);
imagedestroy($src);
return true;
}
?>
|
Вот эта функция делает миникопию изображения. На никсовых серверах вопросов вообще не возникает. На виндовых какое-то ощущение, что файл не закрыт. | |
|
|
|
|
|
|
|
для: DJ Paltus
(17.01.2013 в 23:16)
| | А вы отправьте Content-type явно, Apache может и подставляет заголовок по умолчанию, IIS может этого не делать. | |
|
|
|
|
|
|
|
для: cheops
(18.01.2013 в 07:24)
| | Я не понимаю. А как, и главное, куда отправлять заголовок при простом сохранении файла функцией imagejpeg? | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.01.2013 в 13:16)
| | В файле, где вызываете эту функцию или прямо в самой функции вызовете
<?php
header('Content-type: image/jpeg');
?>
|
| |
|
|
|
|
|
|
|
для: 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.
Спасибо, Игорь, за потраченное время ) | |
|
|
|