Fopen не открывает файл

Обновлено: 07.07.2024

в рамках ведения журнала приложение, которое я пытаюсь открыть локальный файл, и если файл еще не существует, создать новый. Вот что у меня есть:

Я дважды проверил, и /logs каталог chmod 0777, и я даже пошел дополнительный шаг chown'ING его apache:apache для хорошей меры. Тем не менее, когда скрипт открывает файл, он дает мне предупреждение о том, что файл не существует, и бомбит. Файл никогда не создается.

Я нужно подавить fopen() предупреждение, чтобы заставить его создать файл?

когда вы работаете с путями в PHP, контекст имеет большое значение. Если вы работаете с URL-адресами в контексте перенаправления , корневой каталог ( ' / ' ) ссылается на корневой каталог вашего домена. То же самое касается путей для связывания файлов или изображений и директив include и require.

однако, когда вы имеете дело с командами файловой системы, такими как fopen корневой каталог ('/') является корневая система. Не ваш домен root.

или вы можете использовать $_SERVER['DOCUMENT_ROOT'] как предложено в других ответах для доступа к сохраненному значению вашего сервера для пути к корню документа. The /var/www часть.

вы также можете использовать __DIR__ магическая константа в некоторых случаях. Обратите внимание, что __DIR__ будет каталогом, в котором находится текущий файл, который не обязательно совпадает с корнем вашего приложения. Так, например, если корень вашего приложения /var/www/application и вы работаете в /var/www/application/src/controllers/my_controller.php , потом __DIR__ будет /var/www/application/src/controllers . см. здесь, в документации по PHP.

вы пробовали это?

сервер, на котором вы работаете, мог бы посадить вас в тюрьму только для работы в каталоге phpapp и его подкаталогах.

один из способов обойти эту проблему в UBUNTU 14.04 - щелкнуть правой кнопкой мыши по каталогу, где находится файл, и изменить разрешения "другие" на "создание и удаление файлов".

вы всегда можете открыть файл с помощью just "a" , Он также создаст новый файл.
Не нужно ставить условие.

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

путь к файлу должен быть с корневым сервером. Я мог бы достичь этого, используя функцию phpinfo() метод внутри документа, который я хотел знать. Поэтому при использовании phpinfo () вы увидите информационный документ. Если вы найдете для _SERVER ["SCRIPT_FILENAME"] вы увидите абсолютный путь к вашему файлу.

Я надеюсь, что это поможет кому-то.

Не забудьте убедиться, что SELinux не блокирует вас.

Читайте также: