Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2016, 11:23   #1
Тёма_)
Пользователь
 
Регистрация: 12.11.2011
Сообщений: 68
Вопрос Не отображаются картинки на сайте ( 404 Not Found )

Всем привет,

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

я генерирую как страницу с фотографиями, так и pdf файлы так - когда у меня генерируюется pdf файл, то он падает вне проекта и что бы его открыть я кидаю пользователю ссылку типо - мойсайт/readFile?fileName=имя файла.pdf

таким кодом на сервере

PHP код:
public function readFileAction ()
    {
        
$name     $this->getParamRequired('fileName');
        
$fullPath self::WORK_DIR."/pdf/{$name}";
        if(
is_readable($fullPath)) {
            
header('Content-Type: application/pdf');
            
header("Content-Disposition: inline; filename=x.pdf");
            
readfile$fullPath );
        }
        else {
            throw new \
System\Exception("Не удаётся прочитать файл `{$fullPath}`");
        }
    } 
также мне нужно делать и с картинками:

сейчас у меня код выглядит так:

PHP код:
public function readPhotoAction ()
    {
        
$name     $this->getParamRequired('photoName');
        
$ext      $this->getParamRequired('extension');
        
$fullPath self::WORK_DIR."/maps/{$name}.{$ext}";
        if(
is_readable($fullPath)) {
            
header('Content-Type: image/png');
            
readfile$fullPath );
        }
        else {
            throw new \
System\Exception("Не удаётся прочитать файл `{$fullPath}`");
        }
    } 
ссылка должна получиться такая - мойсайт/readPhoto?photoName=foto&extension= jpg

выдает ошибку

404 Not Found

nginx

дебажил, в данную функцию все попадает при открытии ссылки, картинка на сервере с таким именем и расширением есть, что еще может быть?

P/S нужно именно этим методом сделать, просто настроить крон на нужную папку можете не предлагать.
Тёма_) вне форума Ответить с цитированием
Старый 19.09.2016, 11:37   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

может $fullPath - все же неверен?
я так понимаю 404 генерит исключение по readfile( $fullPath ); ?
ADSoft вне форума Ответить с цитированием
Старый 19.09.2016, 11:37   #3
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

еще может быть дело в правах на файл/каталог
ADSoft вне форума Ответить с цитированием
Старый 19.09.2016, 12:01   #4
Тёма_)
Пользователь
 
Регистрация: 12.11.2011
Сообщений: 68
По умолчанию

Все нашел проблему, там было дело с экранированием, было правило на сервере прописано и он точку принимал за любой символ и пытался его открыть

PHP код:
if ($request_uri ".(jpg|jpeg|gif|gz|zip|flv|rar|wmv|avi|css|swf|png|htc|ico|mpeg|mpg|txt|mp3|mov|js)(\?[_a-z0-9.=&/?]+)?$") {
            
expires 30d;

            break;
        } 
Т.к доступа к изменению этого у меня нету, я сделал так:

PHP код:
public function readPhotoAction ()
    {
        
$name     $this->getParamRequired('photoName');
        
$ext        $this->getParamRequired('extension');
        
$fullPath  self::WORK_DIR."/maps/{$name}.{$ext}";
        if(
is_readable($fullPath)) {
            
header("Content-Type: image/{$ext}");
            
header("Content-Disposition: inline; filename=x.{$ext}");
            
readfile$fullPath );
        }
        else {
            throw new \
System\Exception("Не удаётся прочитать файл `{$fullPath}`");
        }
    } 
и ссылку поменял на такую - мойсайт/readPhoto?extension=png&photoName=f oto

и все заработало)))
Тёма_) вне форума Ответить с цитированием
Старый 20.09.2016, 13:48   #5
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от Тёма_) Посмотреть сообщение
я кидаю пользователю ссылку типо - мойсайт/readFile?fileName=имя файла.pdf
Ох, ломанут ваш сайт с таким подходом передачи имени файла в url.
Не говоря уж о том, что отдавать скачиваемые файлы на php - плохая затея, тк очень сильно грузит сервер.


Вы хоть внутри $name = $this->getParamRequired('photoName'); проверяете присланное photoName на наличие всяких /./.. ? А то у вас любой файл с хостинга скачать удастся, включая master.passwd

А если включена опция fopen wrappers и возможна работа с удалёнными файлами - от имени вашего хостинга можно будет раздавать чужие файлы, включая трояны, по ссылке мойсайт/readFile?fileName=http://имя файла.pdf

Последний раз редактировалось predefined; 20.09.2016 в 14:05.
predefined вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
idHttp - unknown protocol l HTTP/1.0 404 Not Found hapera2 Работа с сетью в Delphi 3 28.06.2014 21:49
HTTP/1.1 404 Not Found stalker1995s Общие вопросы Delphi 1 16.02.2013 14:41
EidHttpPtotocolException with message http/1.1 404 Not found DKENT Работа с сетью в Delphi 0 28.11.2011 18:31
POST на indy HTTP/1.1 404 Not Found jskorvin Работа с сетью в Delphi 2 14.12.2010 13:52
Indy. HTTP 404 Not found TwiX Работа с сетью в Delphi 6 14.09.2010 02:30