Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ссылка на файл расположенный вне сайта

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: доступ к удаленному файлу
SlavikSG
Отправлено: 13 Октября, 2011 - 16:57:08
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Февр. 2008  


Помог: 0 раз(а)




Как сделать на странице сайта ссылку на закачку небольшого файла, который расположен вне корневой root-директории сервера Apache (DocumentRoot). Файл, скажем, расположен где-то в локальной сети. С компьютера, на котором работает сервер Apache, доступ к этому файлу есть. Но как сделать доступ на скачку этого файла из интернета средствами страницы сайта?

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


-----
Нет в русском языке слова дешеГО. Есть слово дешеВО.
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Октября, 2011 - 17:03:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




ln -s /path/do/file/or/dir/ /path/do/new/www/symlink
 
 Top
SlavikSG
Отправлено: 14 Октября, 2011 - 09:19:58
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Февр. 2008  


Помог: 0 раз(а)




DeepVarvar пишет:
ln -s /path/do/file/or/dir/ /path/do/new/www/symlink

Не понял, если честно. Что такое "ln -s"? Мне тут даже Яндекс не помог. Можно поподробнее?


-----
Нет в русском языке слова дешеГО. Есть слово дешеВО.
 
 Top
White
Отправлено: 14 Октября, 2011 - 09:26:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




SlavikSG пишет:
С компьютера, на котором работает сервер Apache, доступ к этому файлу есть
а у самого apache к этому файлу доступа нет, если он не в его корневой директории. так что делайте симлинк если не хотите перемещать или копировать файл в корень сайта
DeepVarvar пишет:
ln -s /path/do/file/or/dir/ /path/do/new/www/symlink
SlavikSG пишет:
Мне тут даже Яндекс
)))нашли у кого спрашивать


-----
if(time()>1356048000) die();
 
 Top
SlavikSG
Отправлено: 14 Октября, 2011 - 09:50:30
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Февр. 2008  


Помог: 0 раз(а)




White пишет:
...так что делайте симлинк если не хотите перемещать или копировать файл в корень сайта...

Так вот я и не пойму, что такое "симлинк". Покажите на полном живом примере, как этим пользоваться. Как это можно вставить в HTML страницу или в скрипт PHP. Плиииз!


-----
Нет в русском языке слова дешеГО. Есть слово дешеВО.
 
 Top
Мелкий Супермодератор
Отправлено: 14 Октября, 2011 - 10:07:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Это команда консоли *nix - систем.
Если вы не поняли, что я сказал - ставите любой понравившийся дистрибьютив linux в виртуалку или второй системой.

Заодно, натренируетесь спрашивать поисковики. Yandex, запрос "ln -s", 2-4 результаты выдачи - ответ, что такое ln - дан. "симлинк" - и вовсе первые как минимум 3 результата.


Вариант 2: http://forum.php.su/topic.php?fo...=35&topic=11


-----
PostgreSQL DBA
 
 Top
SlavikSG
Отправлено: 14 Октября, 2011 - 15:06:32
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Февр. 2008  


Помог: 0 раз(а)




Мелкий пишет:
...ставите любой понравившийся дистрибьютив linux в виртуалку или второй системой.

Нет. Ну, это совсем не выход - ставить на комп виртуальную машину с другой операционной системой, ради одной единственной ссылки на файл.

Мелкий пишет:
Заодно, натренируетесь спрашивать поисковики. Yandex, запрос "ln -s", 2-4 результаты выдачи - ответ, что такое ln...

Именно про Линукс мне Яндекс и ответил. Отчего я и подумал, что это совсем не то, что имел в виду автор того поста. А оказывается именно это он и имел в виду.

Мелкий пишет:
Вариант 2: http://forum.php.su/topic.php?forum=35&topic=11

Внимательно изучил это дело. Тут имеется в виду - отдавать файл клиенту не по ссылке, а по скрипту. Получилось. Работает. Спасибо!

Вот такой код в итоге получился:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $FullFileName = '//Megaserver/WORK/Slavik/stalker.rar';
  2. $FlSize = FileSize($FullFileName);
  3. If(IsSet($_SERVER['HTTP_USER_AGENT']) and StrPos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
  4.   Header('Content-Type: application/force-download');
  5. Else
  6.   Header('Content-Type: application/octet-stream');
  7. Header("Accept-Ranges: bytes");
  8. Header("Content-Length: ".$FlSize);
  9. Header("Content-Disposition: attachment; filename=stalker.rar");
  10. ReadFile($FullFileName);
  11.  


Казалось бы проблема решена. Но вылез один глюк, который как-то вылезал у меня и в другом месте. При работе с моими личными сетевыми ресурсами файловые функции PHP работают очень медленно. С самим PHP это не связано никак. Ведь с ресурсами локального компа, все работает моментально. Куда бы я файл не положил, на любой диск, в любую папку, файл моментально начинает качаться. Но как только я этот же файл кладу в сеть - все!!! Дикие тормоза. Страница думает секунд сорок, затем вылетает ошибка. Жму обновить. Снова немного думает и потом файл начинает не качаться, а загружаться прямо в браузер. Жму выход, снова кликаю на ссылку, и только уже тогда файл начинает закачиваться. В общем, глюк на глюке и глюком погоняет.

Я не спрашиваю - почему. Это уже точно выходит за рамки работы PHP. Скорее всего - это как-то связано с работой моей сети. Хотя на поверку я и не замечаю никаких тормозов. Все летает! Какие-то тормоза в моей сети замечает только PHP.

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

Еще раз большое спасибо за ответы! Покопаюсь еще. Если не получится, то все же придется, наверное, копировать файл в корень сайта.

(Отредактировано автором: 14 Октября, 2011 - 15:12:02)



-----
Нет в русском языке слова дешеГО. Есть слово дешеВО.
 
 Top
Мелкий Супермодератор
Отправлено: 14 Октября, 2011 - 15:31:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




SlavikSG пишет:
Нет. Ну, это совсем не выход - ставить на комп виртуальную машину с другой операционной системой, ради одной единственной ссылки на файл.

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


-----
PostgreSQL DBA
 
 Top
SlavikSG
Отправлено: 14 Октября, 2011 - 16:30:32
Post Id


Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Февр. 2008  


Помог: 0 раз(а)




Мелкий пишет:
...без никсов уважающему себя веб-разработчику никуда.

Ну, таким громким словом я себя назвать никак не могу.
Немного программирую, но в других областях. В PHP залезаю лишь по мере необходимости и очень не часто.

Упростил код, выкинув оттуда файловую функцию FileSize().
Собственно проблема почти решена. Тормозит также, но зато уже не выдает никаких ошибок. Подумает-подумает и начинает уверенно качать файл.

Вопрос:
Можно оставить код таким упрощенным? Не вылезет это никаким боком в каком-нибудь браузере? Проверял в обычном ИЕ, в Мозиле, в Google Chrome. Все работает. В Опере еще не проверял.

PHP:
скопировать код в буфер обмена
  1. $FullFileName = '//Megaserver/WORK/Slavik/stalker.rar';
  2. If(IsSet($_SERVER['HTTP_USER_AGENT']) and StrPos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
  3.    Header('Content-Type: application/force-download');
  4. Else
  5.    Header('Content-Type: application/octet-stream');
  6. Header("Content-Disposition: attachment; filename=stalker.rar");
  7. ReadFile($FullFileName);

(Отредактировано автором: 14 Октября, 2011 - 16:35:50)



-----
Нет в русском языке слова дешеГО. Есть слово дешеВО.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB