PHP fopen имя файла. Это относительное или абсолютное? - PullRequest
1 голос
/ 23 декабря 2009

Привет, у меня проблемы с моими путями и fopen со ссылкой на мой веб-сервер.

У меня есть файл, сохраненный в public / dan / new / apps / lovescopes / thisfile.php .

thisfile.php создаст новый файл в public / internalServer / lovescopes / xml / 2009/12 , используя fopen "x +".

теперь мои ошибки отображаются в строке, где fopen:

  1. если я введу путь относительно, как ../../../../internalServer/lovescopes/xml/2009/12, я получу ошибку «Отказано в доступе».

  2. если я ввожу абсолютный путь, например /public/internalServer/lovescopes/xml/2009/12, я получаю сообщение «Не удалось открыть поток: нет такого файла или каталога»

Я все еще в замешательстве, если мне следует использовать относительные или абсолютные пути. У меня есть ftp_nlist, и он отлично работает с # 2. Fopen это то же самое?

Также с различными сообщениями об ошибках, которые, как я считаю, указывают на один и тот же путь, я не знаю, каким образом я делаю это правильно 1 или 2?

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

6 голосов
/ 23 декабря 2009

Почему бы не использовать realpath () с вашими относительными путями.

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

Кроме того, если вы хотите читать / записывать файлы за один раз из / в переменную, вы можете использовать file_get_contents () и file_put_contents () .

3 голосов
/ 16 апреля 2010

Сама функция PHP не является ни абсолютной, ни относительной, это зависит от пути.

Обе ошибки, которые вы получаете, связаны с этим конкретным путем, либо разрешениями, либо существованием, поэтому я бы порекомендовал получить путь, который, как вы знаете, существует, и у вас есть доступ и пробуйте его (текущий каталог может быть хорошим ). Вы также можете временно изменить файл и путь chmod, просто чтобы убедиться, что у вас есть права на чтение. Распечатайте результаты и все ошибки.

fopen("public/dan/new/apps/lovescopes/test.php");
fopen("./test.php");

Если ни одна из этих ошибок не вернется, вы узнаете, что это просто проблема с путем.

Кроме того, ваш PHP-процесс может иметь другие права доступа, чем ваш пользователь, так что следите за этим.

2 голосов
/ 10 сентября 2013

Кроме того, убедитесь, что вы указали относительный путь относительно файла, в котором вызывается функция (не обязательно там, где находится действительный код).
В PHP используйте getcwd() (получите текущий рабочий каталог; manual ), чтобы выяснить, из какого каталога будет основан ваш относительный путь.

0 голосов
/ 23 декабря 2009

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

...