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
Форумы портала PHP.SU :: Версия для печати :: Ссылка на файл расположенный вне сайта
Форумы портала PHP.SU » » Вопросы новичков » Ссылка на файл расположенный вне сайта

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

1. SlavikSG - 13 Октября, 2011 - 16:57:08 - перейти к сообщению
Как сделать на странице сайта ссылку на закачку небольшого файла, который расположен вне корневой root-директории сервера Apache (DocumentRoot). Файл, скажем, расположен где-то в локальной сети. С компьютера, на котором работает сервер Apache, доступ к этому файлу есть. Но как сделать доступ на скачку этого файла из интернета средствами страницы сайта?

Ничего более умного, как предварительно скачать этот файл корень сайта и уже потом дать на него ссылку, мне в голову не приходит. Есть какой-нибудь более гибкий и продвинутый способ решить эту проблему?
2. DeepVarvar - 13 Октября, 2011 - 17:03:48 - перейти к сообщению
ln -s /path/do/file/or/dir/ /path/do/new/www/symlink
3. SlavikSG - 14 Октября, 2011 - 09:19:58 - перейти к сообщению
DeepVarvar пишет:
ln -s /path/do/file/or/dir/ /path/do/new/www/symlink

Не понял, если честно. Что такое "ln -s"? Мне тут даже Яндекс не помог. Можно поподробнее?
4. White - 14 Октября, 2011 - 09:26:28 - перейти к сообщению
SlavikSG пишет:
С компьютера, на котором работает сервер Apache, доступ к этому файлу есть
а у самого apache к этому файлу доступа нет, если он не в его корневой директории. так что делайте симлинк если не хотите перемещать или копировать файл в корень сайта
DeepVarvar пишет:
ln -s /path/do/file/or/dir/ /path/do/new/www/symlink
SlavikSG пишет:
Мне тут даже Яндекс
)))нашли у кого спрашивать
5. SlavikSG - 14 Октября, 2011 - 09:50:30 - перейти к сообщению
White пишет:
...так что делайте симлинк если не хотите перемещать или копировать файл в корень сайта...

Так вот я и не пойму, что такое "симлинк". Покажите на полном живом примере, как этим пользоваться. Как это можно вставить в HTML страницу или в скрипт PHP. Плиииз!
6. Мелкий - 14 Октября, 2011 - 10:07:17 - перейти к сообщению
Это команда консоли *nix - систем.
Если вы не поняли, что я сказал - ставите любой понравившийся дистрибьютив linux в виртуалку или второй системой.

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


Вариант 2: http://forum.php.su/topic.php?fo...=35&topic=11
7. SlavikSG - 14 Октября, 2011 - 15:06:32 - перейти к сообщению
Мелкий пишет:
...ставите любой понравившийся дистрибьютив 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.

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

Еще раз большое спасибо за ответы! Покопаюсь еще. Если не получится, то все же придется, наверное, копировать файл в корень сайта.
8. Мелкий - 14 Октября, 2011 - 15:31:27 - перейти к сообщению
SlavikSG пишет:
Нет. Ну, это совсем не выход - ставить на комп виртуальную машину с другой операционной системой, ради одной единственной ссылки на файл.

Это предложение как раз ничего общего с темой не имеет, а целью было лишь намекнуть, что без никсов уважающему себя веб-разработчику никуда.
9. SlavikSG - 14 Октября, 2011 - 16:30:32 - перейти к сообщению
Мелкий пишет:
...без никсов уважающему себя веб-разработчику никуда.

Ну, таким громким словом я себя назвать никак не могу.
Немного программирую, но в других областях. В 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);

 

Powered by ExBB FM 1.0 RC1