Симлинк, ломающий библиотеку загрузки CodeIgniter - PullRequest
0 голосов
/ 14 августа 2011

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

внутри / дома / постановка:

proj
proj-builds

в / home / staging / proj:

uploads
www -> /home/staging/proj-builds/b-119/www

в пределах / home / staging / proj-builds:

proj-b922
proj-b921
...

Я сделал www символическую ссылку на последний каталог b-#/www из proj, который находится за пределами proj dir.

При попытке загрузить что-либо с помощью класса Upload я получаю следующее сообщение об ошибке: «Путь к загрузке не соответствует действительности»

Этого не произошло, когда каталоги не были связаны символами.

Apache vhost указывает на символическую ссылку www.

Есть идеи, почему это происходит и как это исправить?

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Посмотрите на разрешение символических ссылок ...

Начиная с PHP 4.0.2, все символические ссылки разрешаются, что означает, что скрипт (например: myscript.php), который вы поместили в папку /home/staging/proj/www/, будет "видеть"сам по себе не как /home/staging/proj/www/myscript.php, а скорее как /home/staging/proj-builds/b-119/www/myscript.php, и это может вызвать некоторые проблемы, если скрипт ожидает увидеть себя в заранее фиксированном месте.

Обратите внимание, что для PHP 5.2.x под Windows символические ссылкивсе еще не разрешены, в то время как для 5.3.x под Windows они разрешены.В других Unix / Linux-подобных операционных системах они разрешаются в большинстве случаев.

Вы можете использовать это ...

<?php print "__FILE__ = " . __FILE__ . "<br />\n"; ?>

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

Тот же принцип применяется для операторов include / require.

Так что, если используемый вами код ожидает увидеть скрипт или иметь доступ к папке, нафиксированное (может быть определено в конфигурации) местоположение, например: / home / staging / proj / www /, оно не найдет его там, где ожидается.

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

0 голосов
/ 14 августа 2011

Я могу придумать как минимум два возможных решения:

  1. У вас может быть простая проблема с разрешениями. Имеет ли Apache полный доступ для чтения к этой папке и ко всем родительским папкам?
  2. Ваш сервер может быть настроен на игнорирование символических ссылок. Убедитесь, что FollowSymLinks включен (и что вы понимаете риски).

Кроме того, если вы имеете дело с загрузками, PHP может быть запрещен или запрещать вам сохранять файл вне текущего каталога, например, Безопасный режим .

...