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

Форум PHP

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

 

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

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

тема: Вывод изображений на показ
 
 автор: Mefisto84   (18.07.2009 в 12:38)   письмо автору
 
 

Здравствуйте!
Первый раз если честно столкнулся с такой проблемой перерыл кучу тем на форуме, но подходящего ничего не нашел, пришлось создать новую тему.
Проблема вот в чем, на сайт организовал загрузку фотографий, все они имеют расширение jpg. Картинки загружаются и удаляются, все работает. При чем, при загрузке картинки, автоматически создается еще одна, меньшего размера и к названию подставляется слово small, т.е. если грузим фотку 1.jpg, то на сервере кроме неё еще появляется одна фотка small1.jpg
Проблема в том, что после этого картинку 1.jpg невозмоно просмотреть. Картинка small отображатся, а исходная нет. На сервере она есть, размер нормальный, то есть вроде бы все в порядке, а на экране вместо картинки красный квадратик. Пути проверил, прописаны верно. Вообще не представляю в чем может быть проблема? На других сайтах тот же самый скрипт работает отлично, никаких проблем. Может ли быть проблема с хостингом? Может быть на этом хостинге что-то отключено? Может такое быть? Хостинг Агава. Заранее спасибо.

  Ответить  
 
 автор: Trianon   (18.07.2009 в 13:08)   письмо автору
 
   для: Mefisto84   (18.07.2009 в 12:38)
 

Тогда может быть имеет смысл создавать неуменьшенную картинку теми же инструментами, что и уменьшенную?
Давать ей имя normal1.jpg
А исходную убивать, чтоб не мешалась.

UPD. Это не скрказм ни разу.
Помимо решения исходной проблемы, будет убит и еще один заяц.
Загрузить код под видом картинки станет невозможно.

  Ответить  
 
 автор: Mefisto84   (18.07.2009 в 13:45)   письмо автору
 
   для: Trianon   (18.07.2009 в 13:08)
 

ну возможно это и выход из ситуации, возможно что так и сделаю. Но все таки, почему же этот скрипт работает на других серверах, а на этом нет?
Кстати, проверил сейчас загрузку вообще любых файлов на сервер. Они загружаются, но скачать их нельзя. Как будто их вообще нет на сервере, но они там есть, 100%. В чем может быть проблема? Загружаю файлы при помощи вот такой простой конструкции:


if(!empty($_FILES['foto']["name"]))

 if($_FILES['foto']["size"]<1024*2*1024)
  {
  if($_FILES['foto']['error']==0) 
   { 

    chmod('../../photos/personnel/', 0777);

    $a = RAND(1,99999);
    $upload_file=$a.$_FILES['foto']['name']; 
    $upload_file=strtolower($upload_file);
    $upload_dir="../../photos/personnel/"; 
    $tmp_path=$_FILES['foto']['tmp_name']; 
    $full_path=$upload_dir.$upload_file; 
    move_uploaded_file($tmp_path,$full_path);

chmod('../../photos/personnel/', 0750);

   }
  }
}



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

  Ответить  
 
 автор: sim5   (18.07.2009 в 14:03)   письмо автору
 
   для: Mefisto84   (18.07.2009 в 13:45)
 

Сначала проверяют ошибки загрузки, а уже затем...., а не наоборот. И малые, и большие лежат в одной папке?

  Ответить  
 
 автор: Trianon   (18.07.2009 в 15:07)   письмо автору
 
   для: Mefisto84   (18.07.2009 в 13:45)
 

chmod 0750 приводит к тому, что Вы блокируете чтение остальными пользователями.
Это так и задумывалось?

На вопросы типа "почему у меня там работало так, а здесь - по-другому" есть лишь один правильный но бесполезный ответ. Потому что здесь - не там.
Потому что здесь апач входит не в те группы, потому что php запущен не из под того пользователя, потому что... Потому!
Следует задаваться вопросом "Почему не работает", а не "почему рабоатет не так как где-то и когда-то"

  Ответить  
 
 автор: Mefisto84   (18.07.2009 в 18:08)   письмо автору
 
   для: Trianon   (18.07.2009 в 15:07)
 

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

chmod 0750 указан верно. Но это меня натолкнуло на мысль проверить как обстоят дела с чмодом у самих файлов? Проверил... У всех файлов права 0600, то есть закрыты от всех. Изменил права вручную, файлы стали показываться на странице. Но вручную то не дело, добавил строчку:


    chmod('../../photos/personnel/$upload_file', 0644);

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

if (file_exists ('../../photos/personnel/$upload_file'))
{ echo "YES";} else { echo "NO";}

Пишет НЕТ, опять же из-за прав правильно?
Тогда вопрос: как мне выставить права на файл? Как сделать так, что бы при загрузке файла у него сразу были права 0644? Потому как после загрузки с ним уже ничего нельзя сделать.

  Ответить  
 
 автор: Trianon   (18.07.2009 в 18:20)   письмо автору
 
   для: Mefisto84   (18.07.2009 в 18:08)
 

umask() применять пробовали?

  Ответить  
 
 автор: Mefisto84   (18.07.2009 в 20:03)   письмо автору
 
   для: Trianon   (18.07.2009 в 18:20)
 

нет, не пробовал. И вообще эту функцию ни разу не использовал. Поискал в манулах описание функции, что делает понял, а вот куда её втыкать, нет. Вообще описание очень скудное

umaskumask. Изменение текущего значения umask

int umask (int mask)

Функция устанавливает значение PHP umask равным (mask & 0777) и возвращает предыдущее значение umask. 
При использовании PHP как серверного модуля, значение umask восстанавливается при 
завершении каждого запроса.

Если не указывать аргумент, то просто возвращается текущая маска.



то есть без поллитра не разберешься, куда её вставлять? надо ли указывать к какому файлу менять права? Попробовал повставлять её в разные места скрипта(до и после заливки файла) ничего не происходит, все на том же уровне.
И вот что еще не понятно: почему удалять файл(с правами 0600) через скрипт разрешается, а изменить ему права нет?

  Ответить  
 
 автор: Trianon   (18.07.2009 в 20:18)   письмо автору
 
   для: Mefisto84   (18.07.2009 в 20:03)
 

оригинальный мануал находится по адресу http://ru.php.net/umask
Первый и единственный пример в нем как раз открывает маску для работы chmod
http://www.opennet.ru/man.shtml?topic=umask&category=2
http://ru.wikipedia.org/wiki/Umask

  Ответить  
 
 автор: Mefisto84   (19.07.2009 в 17:08)   письмо автору
 
   для: Trianon   (18.07.2009 в 20:18)
 

Спасибо запомощь,но увы, ничего не получается, скопировал код прям с мануала и не работает. Написал хостеру, посмотрю что он скажет? Еще раз спасибо.

  Ответить  
 
 автор: Trianon   (19.07.2009 в 18:01)   письмо автору
 
   для: Mefisto84   (19.07.2009 в 17:08)
 

Сообщите, что посоветует.
На самом деле, ситуация с управлением правами из-под скрипта частенько в хостера упирается....

  Ответить  
 
 автор: sim5   (19.07.2009 в 18:22)   письмо автору
 
   для: Trianon   (19.07.2009 в 18:01)
 

Итересно почему в одну и туже папку файлы пишутся с разными правами, получается так?

Mefisto84 А при записи уменьшенных копий в эту папку, вы также манипулируете правами на папку?

  Ответить  
 
 автор: Trianon   (19.07.2009 в 18:28)   письмо автору
 
   для: sim5   (19.07.2009 в 18:22)
 

>Итересно почему в одну и туже папку файлы пишутся с разными правами, получается так?
и/или от имени разных пользователей.

  Ответить  
 
 автор: sim5   (19.07.2009 в 18:35)   письмо автору
 
   для: Trianon   (19.07.2009 в 18:28)
 

Ну вот я и думаю, как это может получится, если владельцем временного файла и файла копии является по сути один и тот же? Хотя это можно выяснить, кстати.

  Ответить  
 
 автор: Mefisto84   (20.07.2009 в 03:20)   письмо автору
 
   для: sim5   (19.07.2009 в 18:35)
 

Конечно сообшу что они посоветуют. Пока что говорят что у меня (скорей всего) пути неправильно выставлены, но этого не может быть, так как и большое и маленькое изображение лежат в одной папке, только вот маленькое выводится на экран, а большого как будто нет.
Почему маленькое видно? Я предполагаю потому, что маленькое изображение СОЗДАЕТСЯ, то есть файл не просто перемещается а именно создается при помощи функций


imagecreatetruecolor
imagecopyresampled
imagejpeg


Возможно эти функции сами выставляют права на файл 0644?
Странно что chmod прекрасно срабатывает на директории, но ничего не делает с файлами. Ладно, жду ответа хостера. :-)

  Ответить  
 
 автор: Sergeich   (20.07.2009 в 09:17)   письмо автору
 
   для: Mefisto84   (20.07.2009 в 03:20)
 

А я бы еще попробовал поиграть с путями... Можно выставить абсолютные пути, чтобы еще раз проверить. Странно, чтобы две функции РНР действовали не одинаково относительно прав на файл. Ошибка должна быть где-то у Вас скорее всего. Ведь, не может же РНР под одним пользователем изменять картинку (все-таки имеет доступ!), а под другим копировать загруженную картинку из временной дирректории в постоянную. А если вообще убрать chmod из скрипта?

  Ответить  
 
 автор: serjinio   (20.07.2009 в 14:02)   письмо автору
 
   для: Mefisto84   (20.07.2009 в 03:20)
 

Никаким боком эти функции к правам не относятся ...покажите хтмл код маленького и большого изображения ,что выводятся в браузер..кстати в других браузерах картинку видно??? может все таки проблема с хтмлом?

  Ответить  
 
 автор: Trianon   (20.07.2009 в 14:05)   письмо автору
 
   для: serjinio   (20.07.2009 в 14:02)
 

ну принимать автора топика совсем уж за идиота наверное не стоит..?

  Ответить  
 
 автор: Mefisto84   (20.07.2009 в 19:41)   письмо автору
 
   для: Trianon   (20.07.2009 в 14:05)
 

По поводу путей как уже говорил, всё нормально, ведь всё грузится, всё удаляется. Но не выводится на экран исходное изобржение, если это изображение, и не скачивается - если это файл. Проблема именно в правах, потому как права 0600, то есть нифига с ним сделать нельзя. Поменять права никак неполучается, вообще первый раз такой геморр.
В общем получил ответ от хостера, говорит в чмоде, поставь права 0755 на директорию, а не 0777 как было у меня. Не понял как же тогда будет грузиться файл? Ладно, попробовал, нифига, никакого толка, файл все равно имеет права 0600. Написал письмо снова, посмотрим что на это раз скажет. Сделаю оговорку, указал хостеру путь на сервере до скрипта, они сами его посмотрели и не нашли ничего кроме вот этого чмода (который так и не помог).
Поиск продолжается... :-)

  Ответить  
 
 автор: sim5   (20.07.2009 в 19:45)   письмо автору
 
   для: Mefisto84   (20.07.2009 в 19:41)
 

Почему вы решили, что с правами 0755 не будет закачаиваться? Будет.

  Ответить  
 
 автор: Mefisto84   (21.07.2009 в 12:34)   письмо автору
 
   для: sim5   (20.07.2009 в 19:45)
 

Ну я предположил что с правами 0755 может не получиться доступ, потому как не уверен от какой группы пользователя будет работать скрипт.
Получил ответ от хостера: "Вам необходимо подправить функцию чмод в скрипте загрузки файлов. Посмотрите вот мы вам выложили пример функции чмод." Очень интересно, иду по указаному адресу, открываю скрипт который они выложили для примера, и что я вижу? Тот же самый чмод что и у меня, никаких отличий нет! Издеваются что-ли над мной? Написал еще одно письмо, с просьбой указать на принципиальные отличия между моим чмодом и их. :-) Такое впечатление складывается, что они сами не знают причины и пытаются её угадать. Опять жду от них ответа...

  Ответить  
 
 автор: sim5   (21.07.2009 в 13:22)   письмо автору
 
   для: Mefisto84   (21.07.2009 в 12:34)
 

Все нормально будет при 755. А вы не смотрели права у файлов загруженного и копии после операции загрузки?

  Ответить  
 
 автор: Mefisto84   (21.07.2009 в 18:47)   письмо автору
 
   для: sim5   (21.07.2009 в 13:22)
 

Ну наконец-то проблема разрешилась. Получил ответ от хостера: разбирайтесь сами, ошибка где-то у Вас в коде, а помогать по коду не входит в компетенцию службы поддержки. Послали короче мягко. :-) Ну ладно, начал мучиться с путями. И тут доперло до меня, что вот здесь

chmod('../../photos/personnel/$upload_file', 0644); 


Должно быть вот так (выделено жирным)

chmod('../../photos/personnel/'.$upload_file.'', 0644); 


Короче говоря, простая невнимательность! :-) И никто главное не заметилэтой мелочи.
Всем большое спасибо за помощь, очень благодарен!
С уважением.

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

>И никто главное не заметилэтой мелочи.

А теги РНР в код свой не пробовали ставить, чтобы замечали сразу? А вообще вот так:
<?
chmod
('../../photos/personnel/'.$upload_file0644);

  Ответить  
 
 автор: Mefisto84   (22.07.2009 в 02:15)   письмо автору
 
   для: sim5   (21.07.2009 в 19:08)
 

:-) если честно то вот только сейчас от Вас узнал, что здесь теги пхп имеют значение. Буду иметь ввиду.

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

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