cannot open php no such file
PHP failed to open stream: No such file or directory в чем ошибка?
Warning: move_uploaded_file(/img/test.jpg): failed to open stream: No such file or directory in C:\server\Apache\Apache24\htdocs\www1\api\create.php on line 17
FILE IS img/test.jpg
Warning: move_uploaded_file(img/test.jpg): failed to open stream: No such file or directory in C:\server\Apache\Apache24\htdocs\www1\api\create.php on line 17
Warning: move_uploaded_file(): Unable to move ‘C:\server\Apache\Apache24\htdocs\www1\img\php50A0.tmp’ to ‘img/test.jpg’ in C:\server\Apache\Apache24\htdocs\www1\api\create.php on line 17
file is not moved
xymox72k: win7 x64. Я тут попытался воспроизвести ваш пример, поставил xampp,
написал простой пример с использованием относительных путей и copy/unlink/fileExists.
Вроде всё работает, относительные пути без каких-либо фокусов разрешаются. Может я конечно чего не понял, плохо пример воспроизвел.
Естественно, рассматривается случай, когда вам необходимо складывать данные в пределах DOCUMENT_ROOT
xymox72k: нет, php.ini дефолтный, права к папке у пользователя полные (кроме «особого разрешения»).
Попробуйте почитать в гугле вопросы/статейки по запросу «php windows relative path doesn’t work», там некоторые советуют всякие хитрые функции, может поможет.
Failed to open stream : No such file or directory.
What is a good process to quickly find the root cause of the problem?
8 Answers 8
There are many reasons why one might run into this error and thus a good checklist of what to check first helps considerably.
Let’s consider that we are troubleshooting the following line:
Checklist
1. Check the file path for typos
or move whatever is called by require* or include* to its own variable, echo it, copy it, and try accessing it from a terminal:
Then, in a terminal:
2. Check that the file path is correct regarding relative vs absolute path considerations
In order to make your script robust in case you move things around, while still generating an absolute path at runtime, you have 2 options :
define a SITE_ROOT constant yourself :
These 2 practices also make your application more portable because it does not rely on ini settings like the include path.
3. Check your include path
Another way to include files, neither relatively nor purely absolutely, is to rely on the include path. This is often the case for libraries or frameworks such as the Zend framework.
Such an inclusion will look like this :
In that case, you will want to make sure that the folder where «Zend» is, is part of the include path.
You can check the include path with :
You can add a folder to it with :
4. Check that your server has access to that file
It might be that all together, the user running the server process (Apache or PHP) simply doesn’t have permission to read from or write to that file.
To check under what user the server is running you can use posix_getpwuid :
To find out the permissions on the file, type the following command in the terminal:
5. Check PHP settings
If none of the above worked, then the issue is probably that some PHP settings forbid it to access that file.
Three settings could be relevant :
Corner cases
If none of the above enabled to diagnose the problem, here are some special situations that could happen :
1. The inclusion of library relying on the include path
It can happen that you include a library, for example, the Zend framework, using a relative or absolute path. For example :
But then you still get the same kind of error.
This could happen because the file that you have (successfully) included, has itself an include statement for another file, and that second include statement assumes that you have added the path of that library to the include path.
For example, the Zend framework file mentioned before could have the following include :
which is neither an inclusion by relative path, nor by absolute path. It is assuming that the Zend framework directory has been added to the include path.
In such a case, the only practical solution is to add the directory to your include path.
2. SELinux
If you are running Security-Enhanced Linux, then it might be the reason for the problem, by denying access to the file from the server.
To check whether SELinux is enabled on your system, run the sestatus command in a terminal. If the command does not exist, then SELinux is not on your system. If it does exist, then it should tell you whether it is enforced or not.
To check whether SELinux policies are the reason for the problem, you can try turning it off temporarily. However be CAREFUL, since this will disable protection entirely. Do not do this on your production server.
If you no longer have the problem with SELinux turned off, then this is the root cause.
To solve it, you will have to configure SELinux accordingly.
The following context types will be necessary :
For example, to assign the httpd_sys_content_t context type to your website root directory, run :
If your file is in a home directory, you will also need to turn on the httpd_enable_homedirs boolean :
In any case, there could be a variety of reasons why SELinux would deny access to a file, depending on your policies. So you will need to enquire into that. Here is a tutorial specifically on configuring SELinux for a web server.
3. Symfony
If you are using Symfony, and experiencing this error when uploading to a server, then it can be that the app’s cache hasn’t been reset, either because app/cache has been uploaded, or that cache hasn’t been cleared.
You can test and fix this by running the following console command:
4. Non ACSII characters inside Zip file
Apparently, this error can happen also upon calling zip->close() when some files inside the zip have non-ASCII characters in their filename, such as «é».
A potential solution is to wrap the file name in utf8_decode() before creating the target file.
Credits to Fran Cano for identifying and suggesting a solution to this issue
To add to the (really good) existing answer
Shared Hosting Software
open_basedir is one that can stump you because it can be specified in a web server configuration. While this is easily remedied if you run your own dedicated server, there are some shared hosting software packages out there (like Plesk, cPanel, etc) that will configure a configuration directive on a per-domain basis. Because the software builds the configuration file (i.e. httpd.conf ) you cannot change that file directly because the hosting software will just overwrite it when it restarts.
Have your server admin consult the manual for the hosting and web server software they use.
File Permissions
A lot of times people will solve a permissions problem by doing the following (Linux example)
This is not a smart idea, because the file or directory is now world writable. If you own the server and are the only user then this isn’t such a big deal, but if you’re on a shared hosting environment you’ve just given everyone on your server access.
What you need to do is determine the user(s) that need access and give only those them access. Once you know which users need access you’ll want to make sure that
That user owns the file and possibly the parent directory (especially the parent directory if you want to write files). In most shared hosting environments this won’t be an issue, because your user should own all the files underneath your root. A Linux example is shown below
The user, and only that user, has access. In Linux, a good practice would be chmod 600 (only owner can read and write) or chmod 644 (owner can write but everyone can read)
Не удалось открыть поток: нет такого файла или каталога.
Что такое хороший процесс, чтобы быстро найти причину проблемы?
Есть много причин, по которым можно столкнуться с этой ошибкой, и, таким образом, хороший контрольный список того, что проверять в первую очередь, значительно помогает.
Давайте рассмотрим, что мы устраняем неисправности в следующей строке:
контрольный список
1. Проверьте путь к файлу для опечаток
или переместите все, что вызвано require* или include* к своей собственной переменной, отобразите его, скопируйте и попробуйте получить доступ к нему из терминала:
2. Проверьте правильность пути к файлу относительно относительного или абсолютного пути
Чтобы сделать ваш скрипт надежным в случае, если вы перемещаете вещи, все еще генерируя абсолютный путь во время выполнения, у вас есть 2 варианта:
Определите SITE_ROOT константу самостоятельно:
Эти 2 метода также делают ваше приложение более переносимым, поскольку оно не зависит от настроек ini, таких как путь включения.
3. Проверьте ваш путь включения
Такое включение будет выглядеть так:
В этом случае вам нужно убедиться, что папка, в которой находится «Zend», является частью пути включения.
Вы можете проверить путь включения с помощью:
Вы можете добавить в него папку с помощью:
4. Убедитесь, что ваш сервер имеет доступ к этому файлу
Может случиться так, что все вместе, пользователь, выполняющий процесс сервера (Apache или PHP), просто не имеет разрешения на чтение или запись в этот файл.
Чтобы проверить, под каким пользователем работает сервер, вы можете использовать posix_getpwuid :
Чтобы узнать разрешения для файла, введите в терминале следующую команду:
5. Проверьте настройки PHP
Если ничего из вышеперечисленного не сработало, возможно, проблема в том, что некоторые настройки PHP запрещают ему доступ к этому файлу.
Три настройки могут быть актуальны:
Угловые чехлы
Если ничего из перечисленного не позволяет диагностировать проблему, вот несколько особых ситуаций, которые могут произойти:
1. Включение библиотеки с использованием пути включения
Может случиться так, что вы включите библиотеку, например, Zend Framework, используя относительный или абсолютный путь. Например :
Но тогда вы все равно получаете такую же ошибку.
Это может произойти, потому что файл, который вы (успешно) включили, сам имеет оператор включения для другого файла, и этот второй оператор включения предполагает, что вы добавили путь этой библиотеки к пути включения.
Например, упомянутый ранее файл Zend Framework может содержать следующее:
который не является ни включением ни по относительному пути, ни по абсолютному пути. Предполагается, что каталог Zend Framework был добавлен в путь включения.
2. SELinux
Если вы работаете в Security-Enhanced Linux, это может быть причиной проблемы, так как вы отказываете в доступе к файлу с сервера.
Чтобы проверить, включен ли SELinux в вашей системе, выполните sestatus команду в терминале. Если команда не существует, значит SELinux отсутствует в вашей системе. Если он существует, то он должен сказать вам, применяется ли он или нет.
Чтобы проверить, являются ли политики SELinux причиной проблемы, вы можете временно отключить ее. Однако будьте осторожны, так как это полностью отключит защиту. Не делайте этого на вашем производственном сервере.
Если у вас больше нет проблемы с выключенным SELinux, то это является основной причиной.
Следующие типы контекста будут необходимы:
Например, чтобы назначить httpd_sys_content_t тип контекста корневому каталогу вашего сайта, запустите:
Если ваш файл находится в домашнем каталоге, вам также нужно включить httpd_enable_homedirs логическое значение:
В любом случае может быть множество причин, по которым SELinux может запретить доступ к файлу, в зависимости от ваших политик. Так что вам нужно будет выяснить это. Вот учебник, посвященный настройке SELinux для веб-сервера.
3. Symfony
Если вы используете Symfony и сталкиваетесь с этой ошибкой при загрузке на сервер, возможно, кэш приложения не был сброшен, либо потому, app/cache что был загружен, либо этот кэш не был очищен.
Вы можете проверить и исправить это, выполнив следующую консольную команду:
4. Не ACSII символы внутри Zip-файла
По-видимому, эта ошибка также может возникать при вызове, zip->close() когда в некоторых файлах внутри zip-файла есть не-ASCII-символы в имени файла, такие как «é».
Потенциальным решением является завершение имени файла utf8_decode() перед созданием целевого файла.
Кредиты Фран Кано для выявления и предложения решения этой проблемы
Добавить (действительно хороший) существующий ответ
Программное обеспечение Shared Hosting
open_basedir это тот, который может поставить вас в тупик, потому что он может быть указан в конфигурации веб-сервера. Хотя это легко исправить, если вы запускаете свой собственный выделенный сервер, существуют некоторые пакеты программного обеспечения для общего хостинга (такие как Plesk, cPanel и т. Д.), Которые настраивают директиву конфигурации для каждого домена. Поскольку программное обеспечение создает файл конфигурации (то есть httpd.conf ), вы не можете изменить этот файл напрямую, потому что программное обеспечение хостинга просто перезапишет его при перезапуске.
Попросите администратора сервера проконсультироваться с руководством по использованию программного обеспечения хостинга и веб-сервера, которое они используют.
Файловые права
Часто люди решают проблему с разрешениями, выполняя следующее (пример Linux)
Это не разумная идея, потому что файл или каталог теперь доступны для записи. Если вы являетесь владельцем сервера и являетесь единственным пользователем, то это не так уж важно, но если вы работаете в среде общего хостинга, вы только что предоставили всем доступ к своему серверу.
Что вам нужно сделать, это определить пользователей, которым нужен доступ, и предоставить доступ только тем, кому они. Как только вы знаете, каким пользователям нужен доступ, вам нужно убедиться, что
Этот пользователь владеет файлом и, возможно, родительским каталогом (особенно родительским каталогом, если вы хотите записывать файлы). В большинстве сред общего хостинга это не будет проблемой, потому что ваш пользователь должен владеть всеми файлами под вашим корнем. Пример Linux показан ниже
Пользователь и только этот пользователь имеет доступ. В Linux хорошей практикой будет chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но каждый может читать)
Не удалось открыть поток: нет такого файла или каталога.
Что такое хороший процесс, чтобы быстро найти основную причину проблемы?
ОТВЕТЫ
Ответ 1
Есть много причин, по которым можно столкнуться с этой ошибкой, и, таким образом, хороший контрольный список того, что проверять в первую очередь, помогает значительно.
Давайте рассмотрим, что мы устраняем неисправности в следующей строке:
Контрольный
1. Проверьте путь к файлу для опечаток
2. Проверьте, правильно ли указан путь к файлу относительно относительного или абсолютного пути.
Чтобы сделать ваш сценарий надежным на случай, если вы все передвигаете, и при этом генерируете абсолютный путь во время выполнения, у вас есть 2 варианта:
определите константу SITE_ROOT самостоятельно:
в config.php напишите
Эти 2 метода также делают ваше приложение более переносимым, поскольку оно не зависит от настроек ini, таких как путь включения.
3. Проверьте ваш путь включения
Другой способ включения файлов, ни относительный, ни сугубо абсолютный, заключается в использовании пути включения. Это часто относится к библиотекам или фреймворкам, таким как Zend Framework.
Такое включение будет выглядеть так:
В этом случае вам нужно убедиться, что папка, в которой находится «Zend», является частью пути включения.
Вы можете проверить путь включения с помощью:
Вы можете добавить в него папку с помощью:
4. Убедитесь, что ваш сервер имеет доступ к этому файлу
Может случиться так, что все вместе, пользователь, выполняющий процесс сервера (Apache или PHP), просто не имеет разрешения на чтение или запись в этот файл.
Чтобы проверить, под каким пользователем работает сервер, вы можете использовать posix_getpwuid :
Чтобы узнать разрешения для файла, введите в терминале следующую команду:
5. Проверьте настройки PHP
Если ничего из вышеперечисленного не сработало, возможно, проблема в том, что некоторые настройки PHP запрещают ему доступ к этому файлу.
Три настройки могут иметь отношение:
Angular чехлы
Если ничего из перечисленного не позволяет диагностировать проблему, вот несколько особых ситуаций, которые могут возникнуть:
1. Включение библиотеки с использованием пути включения
Может случиться так, что вы включите библиотеку, например, Zend Framework, используя относительный или абсолютный путь. Например:
Но тогда вы все равно получаете такую же ошибку.
Это может произойти из-за того, что файл, который вы (успешно) включили, сам имеет оператор включения для другого файла, и этот второй оператор включения предполагает, что вы добавили путь этой библиотеки к пути включения.
Например, упомянутый ранее файл Zend Framework может содержать следующее:
который не является ни включением ни по относительному пути, ни по абсолютному пути. Предполагается, что каталог Zend Framework был добавлен в путь включения.
2. SELinux
Если вы работаете в Security-Enhanced Linux, это может быть причиной проблемы, поскольку доступ к файлу с сервера запрещен.
Чтобы проверить, включен ли SELinux в вашей системе, выполните команду sestatus в терминале. Если команда не существует, значит, SELinux отсутствует в вашей системе. Если он существует, он должен сообщить вам, применяется ли он принудительно или нет.
Чтобы проверить, являются ли политики SELinux причиной проблемы, вы можете временно отключить ее. Однако будьте осторожны, так как это полностью отключит защиту. Не делайте этого на своем производственном сервере.
Если проблема с выключенным SELinux больше не возникает, это является основной причиной.
Чтобы решить эту проблему, вам необходимо соответствующим образом настроить SELinux.
Будут необходимы следующие типы контекста:
Например, чтобы назначить тип контекста httpd_sys_content_t для корневого каталога вашего сайта, выполните:
Если ваш файл находится в домашнем каталоге, вам также нужно включить логическое значение httpd_enable_homedirs :
3. Symfony
Если вы используете Symfony и сталкиваетесь с этой ошибкой при загрузке на сервер, возможно, кэш приложения не был сброшен, либо потому, что app/cache был загружен, либо этот кэш не был очищен.
Вы можете проверить и исправить это, выполнив следующую консольную команду:
4. Не ACSII символы внутри Zip файла
Кредиты Фрэн Кано для определения и предложения решения этой проблемы
Ответ 2
Чтобы добавить к (действительно хорошему) существующий ответ
Программное обеспечение общего хостинга
Попросите администратора вашего сервера обратиться к руководству по использованию хостинга и веб-серверного программного обеспечения, которое они используют.
Разрешения файла
Много раз люди решат проблему с разрешениями, выполняя следующие действия (пример Linux)
Это не умная идея, потому что файл или каталог теперь доступны для всего мира. Если вы владеете сервером и являетесь единственным пользователем, тогда это не так уж и важно, но если вы находитесь в среде совместного размещения, которую вы только что дали всем на вашем сервере, выполните следующие действия.
Что вам нужно сделать, так это определить пользователя (пользователей), которым нужен доступ, и предоставить только те, к которым они имеют доступ. Как только вы узнаете, какие пользователи нуждаются в доступе, вы захотите убедиться, что
Этот пользователь имеет файл и, возможно, родительский каталог (особенно родительский каталог, если вы хотите писать файлы). В большинстве общедоступных хостинговых сред это не будет проблемой, потому что ваш пользователь должен владеть всеми файлами под вашим корнем. Пример Linux приведен ниже.
Пользователь и только тот пользователь имеет доступ. В Linux хорошей практикой будет chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но каждый может читать)
Ответ 3
Мой код работал нормально на всех машинах, но только на этом начали возникать проблемы (которые раньше работали, я думаю). Использовал echo «document_root» путь для отладки, а также внимательно посмотрел на ошибку, нашел это
Предупреждение: включают в себя (D: /MyProjects/testproject//functions/connections.php): не удалось открыть поток:
Вы можете легко увидеть, где проблемы. Проблемы//перед функциями
Так что просто удалите накладку/из include, и она должна работать нормально. Что интересно, это поведение отличается в разных версиях. Я запускаю один и тот же код на ноутбуке, Macbook Pro и на этом компьютере, пока все работало нормально. Надеюсь, это кому-нибудь поможет.
Ответ 4
Добавить скрипт с параметрами запроса
Ответ 5
Акции Самбы
Если у вас есть тестовый сервер Linux, и вы работаете с клиентом Windows, общий ресурс Samba вмешивается в команду chmod. Так что, даже если вы используете:
на стороне Linux вполне возможно, что Unix Group\www-data по-прежнему не имеет доступа для записи. Одно из рабочих решений, если ваш общий ресурс настроен так, что администраторы Windows отображаются в root: в Windows откройте «Разрешения», отключите наследование для вашей папки с копией, а затем предоставьте полный доступ к www-данным.
Ответ 6
Другая возможная причина: переименование и/или перемещение файлов в текстовом редакторе. Я прошел все этапы без успеха, пока не удалил файл, который продолжал бросать эту ошибку и создавал новую, которая исправила проблему.
Ошибка с require_once (No such file or directory)
При проверке выходит ошибка:
Warning: require_once(\app\vars\connections.php) [function.require-once]: failed to open stream: No such file or directory in Z:\home\test.my\www\tools\email\list_subscribers.php on line 3
Fatal error: require_once() [function.require]: Failed opening required ‘\app\vars\connections.php’ (include_path=’.;C:\php\pear’) in Z:\home\test.my\www\tools\email\list_subscribers.php on line 3
Я только учусь PHP поэтому не знаю причину возникновения ошибки пути до файла проверил(файлы тоже присутствуют).
кодировки файлов одинаковые.
Скрипт тестирую на Denwer.
Скрипты пишу на Aptana Studio 3, build: 3.2.1.201207261642
Если не сложно подскажите способы решения ошибки(На сколько я понял возникает ошибка открытия потока из за того что он не может найти файл)
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Не работает require_once: «No such file or directory»
Зарегился на бесплатном хостинге hostinger. Залил сайт, главная страница находится в папке public.
Вылетает ошибка! Warning: file_get_contents(main.tpl) [function.file-get-contents]: failed to open stream: No such file or directory in /home/u6958797
В чем может быть проблема 16
Добавлено через 49 секунд
и в
кстати тоже
Добавлено через 1 минуту
и вобще вы в таблице тег
Только учусь 
Слэши поменял но ошибку это не решило.
Warning: require_once(app/vars/connections.php) [function.require-once]: failed to open stream: No such file or directory in Z:\home\test.my\www\tools\email\list_subscribers.php on line 3
Fatal error: require_once() [function.require]: Failed opening required ‘app/vars/connections.php’ (include_path=’.;C:\php\pear’) in Z:\home\test.my\www\tools\email\list_subscribers.php on line 3
Пути переписал заново наличие проверил.
Ошибка не исчезает.
Не знаю важно или нет ось Win7 x64.
Добавлено через 10 минут
Вот сам проект:
test.my.zip
Если не сложно помогите разобраться с ошибкой.
Заранее премного благодарен.
Heidel, здесь ошибка не в том, что константы уже где то декларировались или еще что то не так с функцией, а в неверном пути к файлу (или отсутствии прав на чтение)
Проверил пути, символы на наличие латиницы.
Добавлено через 2 минуты
Проектируя другое приложение заметил вот такую ошибку:
и появилось подозрение что такая же ситуация возникает и в этом случае с подключением файла т.е путь указан верно но так как корень находится не в корне а в:
и соответственно там этого файла нет потому он его и не находит.
Поэтому хотелось бы узнать как устранить эту проблему.
Есть ли способ «занулить» путь?
Буду благодарен за любую помощь.
P.S проверка файла HEX редактором не выявила кириллицы или скрытых символов в указаном мной пути.
Подъем скрипта в корень т.е:
устранил проблему и скрипт заработал.
Но хотелось бы узнать как выполнять вызовы из внутренних каталогов или это невозможно.
Заранее благодарен за помощь.
Если не сложно не могли бы вы привести пример или статью где об этом можно прочитать а то не совсем понял мысль.
Добавлено через 9 минут
Благодарю всех за помощь ответ нашел.
Надо было указывать так:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Ошибка «failed to open stream: No such file or directory»
Устанавливаю instantcms 1.0.4,создал папку и загрузил,как исправить эту ошибку Warning.
- cannot open monitor exe как исправить
- cannot perform this operation on a closed dataset как исправить


