Linux include не работает
Оператор include() подключает и вычисляет специфицированный файл.
Нижеследующая документация применима также к require() . Эти две конструкции идентичны во всём, кроме обработки облома. include() выводит Warning!, а require() выдаёт Fatal Error. Иначе говоря, используйте require() , если вы хотите, чтобы отсутствие файла останавливало процессинг страницы. include() не работает таким образом, скрипт продолжит выполнение. Не забудьте также о соответствующей установке include_path.
Когда файл подключён/included, содержащийся в нём код наследует область видимости переменной строки, на которой возникло подключение. Любые переменные, доступные на этой строке в вызывающем файле, будут доступны в вызываемом файле, вперёд от этой точки.
Пример 11-3. Базовый пример include()
Если подключение возникает внутри функции в вызывающем файле, то весь код, содержащийся во включаемом файле, будет работать так, как если бы он был определён внутри. Так что он будет следовать области видимости переменной.
Пример 11-4. Подключение внутри функций
Когда файл подключается, разбор переходит из режима PHP в режим HTML в начале целевого файла и вновь продолжает после конца. Исходя из этого, любой код внутри файла назначения, который должен выполняться как PHP-код, обязан быть заключён в правильные стартовый и конечный тэги РНР.
Windows-версия PHP в настоящее время не поддерживает доступ к удалённым файлам с помощью этой функции, даже если allow_url_fopen включена.
Поскольку include() и require() являются специальными конструкциями языка, вы обязаны заключить их в блок операторов, если это внутри условного блока.
Пример 11-6. include() и условные блоки
Обработка возвращает: можно выполнить оператор return() внутри подключённого файла, чтобы прервать обработку этого файла и возвратиться в скрипт, вызвавший его. Также можно возвращать значения из подключённых файлов. Вы можете принять значение вызова include как обычно.
Примечание: в PHP 3 возвращаемое значение может не появиться внутри блока, если это не блок функции; в этом случае return() применяется к этой функции, а не ко всему файлу.
Пример 11-7. include() и оператор return()
$bar имеет значение 1 , поскольку подключение было успешным. Обратите внимание на отличия в примерах. Первый использует return() внутри подключённого файла, а другие - нет.
Другие способы "подключения" файлов в переменные имеются при помощи fopen() , file() или путём использования include() вместе с Функциями управления выводом.
Когда функциия вызывается в том же файле, где расположена- работает нормально. Но стоит только вынести её в отдельный файл, а потом включить этот файл с include, require и т.п., функция сразу перестаёт работать.
В чём может быть проблема? .
может траблы с глобальными и локальными переменными? такое бывает. вообще опиши подробно как он "не работает" а лучше запости код Originally posted by gufyможет траблы с глобальными и локальными переменными? такое бывает. вообще опиши подробно как он "не работает" а лучше запости код
Глобальных переменных не использую.
Скрипт работает нормально, пока ему не приходится запускать вынесенную в другой файл функцию. Как только эта функция
запускается, броузер выводит чистый экран.
include ( "file1.php" ) ;
//include_once("file1.php");
if ( $condition ) <
fnc_update ( "teacher" , $_POST [ "teacher_id" ] , array ( "login" , "paswd" ) , array ( $_POST [ "login" ] , md5 ( $_POST [ "paswd" ] ) ) ) ;
>
а если функция задекларирована в этом же файле, то все работает /без инклуда/? попробуй в конце кода функции перед последним ">" поставить return 0;
Если функция определена в том же файле- всё работает.
Вставка return 0; не помогла.
то есть ты не понимаешь не работает инклюд или функция?
разрули постепенно
файл инклюдится, ато была бы ошибка
значин не пашет функция
напиши перед кодом функции просто
fnc_update($table, $id, $fields, $values) echo "OK";exit;
и посмотри вызывается ли она вообще. Если вызывается смотри код если нет смотри вызов :)
fnc_update(1,2,3,4);
если опять ОК не выскочит вырубай комп, отдыхай, а потом со свежими силами ищи по новой)))
Все manual'ы по include давно прочитала. В файле нет синтаксических ошибок.
Пробовала закоментировать содержимое функции- всё равно, когда запускается функция, перестаёт работать весь скрипт.
чудес-то не бывает:) проверила наличие открывающих/закрывающих тегов в начале и конце файла?совет: пойди поспи,Ю завтра свежим взглядом найдешь ляп:)) Originally posted by Nadezda
Пробовала закоментировать содержимое функции- всё равно, когда запускается функция, перестаёт работать весь скрипт.
мистика :)
попробуй развести массив и запрос
то есть не передвай array() прямо в вызове функции
а сначала создай $x = array() а потом уже fnc_update($x)
если понимаешь о чем я. думаю ошибка там(в вызове)
разделяй и влавствуй :)
всё верно, LD 100.
Вот такой код:
$db_name = 'testing' ;
$db_user = 'user1' ;
$db_pass = 'passwd2' ;
$db_loc = 'localhost' ;
mysql_connect ( $db_loc , $db_user , $db_pass ) ;
?>
я столкнулся с проблемой. В логах сервера увидел вот это:
PHP Fatal error: Call to undefined function mysql_connect ( ) in / usr / www / smthg / html / config.php on line 6в браузере вывод ошибок выключен.
<?php$db_name = 'testing' ;
$db_user = 'user1' ;
$db_pass = 'passwd2' ;
$db_loc = 'localhost' ;
$connect = array ( mysql_connect ) ;
mysql_connect ( $db_loc , $db_user , $db_pass ) ;
?>
необходимо было сначала определить переменную, что бы вывести массив.
Проблем то ли в настройках php то ли в версии php
В PHP скриптах, вызывая include() , require() , fopen() или их производные, такие как include_once , require_once или даже move_uploaded_file() , часто появляются ошибки или предупреждения:
Не удалось открыть поток: нет такого файла или каталога.
Как быстро найти первопричину проблемы?
Ответ 1
Есть много причин, по которым можно столкнуться с этой ошибкой, и поэтому я дам контрольный список того, что необходимо проверить в первую очередь для решения этой ситуации.
Предположим, у нас есть следующая строка:
require "/path/to/file"
Контрольный список
1. Проверьте путь к файлу на предмет опечаток
проверьте вручную (визуально проверив путь) ;
переместите все, что вызывается с помощью require* или include* в переменную, скопируйте ее и попробуйте получить к ней доступ с терминала:
2. Убедитесь, что путь к файлу правильный с точки зрения относительного и абсолютного пути
если он начинается с косой черты "/", то это относится не к корню папки вашего веб-сайта (корень документа), а к корню вашего сервер :
например, каталог вашего веб-сайта может быть /users/tony/htdocs ;
не относительно пути к корню вашего веб-сайта или файла ;
или всегда используйте абсолютные пути к файлам .
используйте require __DIR__."/relative/path/from/current/file" , который возвращает каталог текущего файла ;
определите SITE_ROOT константу самостоятельно:
в корне каталога вашего веб-сайта создайте файл, например , config.php
в config.php напишите :
в каждом файле, в котором вы хотите сослаться на корневую папку сайта, включите config.php и затем используйте SITE_ROOT константу везде, где хотите:
3. Проверьте свои пути включения
Другой способ включения файлов, ни относительный, ни абсолютный, - это полагаться на путь включения . Это часто бывает с библиотеками или фреймворками, такими как, например, Zend framework.
Подобное включение будет выглядеть так:
include "Zend/Mail/Protocol/Imap.php"
В этом случае вы должны убедиться, что папка, в которой находится «Zend», является частью пути включения.
Это можно проверить с помощью:
echo get_include_path();
Вы можете добавить в него папку с помощью:
set_include_path(get_include_path().":"."/path/to/new/folder");
4. Убедитесь, что у вашего сервера есть доступ к этому файлу
Может случиться так, что у пользователя, запускающего серверный процесс (Apache или PHP), просто нет разрешения на чтение или запись в этот файл.
Чтобы проверить, под каким пользователем запущен сервер, можно использовать posix_getpwuid :
$user = posix_getpwuid(posix_geteuid());
var_dump($user);
Чтобы узнать права доступа к файлу, введите в терминале следующую команду:
ls -l <path/to/file>
5. Проверьте настройки PHP
Если установлено, PHP не сможет получить доступ к любому файлу за пределами указанного каталога (даже через символическую ссылку).
По умолчанию не устанавливается, и в этом случае ограничений нет.
Можно проверить, вызвав phpinfo() или используя ini_get("open_basedir") .
Вы можете изменить настройку, отредактировав файл php.ini или файл httpd.conf.
Е сли включено, могут быть ограничения. Однако данный режим был удален в PHP 5.4. Если вы все еще используете версию, которая поддерживает безопасный режим, обновитесь до версии PHP, которая это еще поддерживает .
О тносится только к включению или открытию файлов через сетевой процесс, такой как http://, но не работает для локальной файловой системы.
Э ти опции можно проверить, используя ini_get("allow_url_include") или установи в с помощью ini_set("allow_url_include", "1") .
Этот пользователь владеет файлом и, возможно, родительским каталогом (особенно родительским каталогом, если вы хотите записывать файлы). В большинстве сред общего хостинга это не будет проблемой, потому что ваш пользователь должен владеть всеми файлами под вашим корневым каталогом.
В Linux хорошей практикой будет использова ние chmod 600 (только владелец может читать и писать) или chmod 644 (владелец может писать, но все могут читать) .
- Звездные волки 2 не запускается на виндовс 10
- Как отключить прилипание окон в windows 10
- Portable base layer windows 10 что это
- Чем открыть cer в линукс
- Команда bash на windows
Другие случаи
Если ничего из вышеперечисленного не помогло диагностировать проблему, могут возникнуть следующие особые ситуации:
1. Включение библиотеки на основе пути включения
Может случиться так, что вы подключаете библиотеку, например, платформу Zend, используя относительный или абсолютный путь. Например:
require "/usr/share/php/libzend-framework-php/Zend/Mail/Protocol/Imap.php"
Но по-прежнему получаете такую же ошибку.
Это могло произойти из-за того, что файл, который вы (успешно) включили, сам имеет оператор include для другого файла, и этот второй оператор include предполагает, что вы добавили путь этой библиотеки к пути включения.
Например, упомянутый ранее файл фреймворка Zend может включать следующее:
include "Zend/Mail/Protocol/Exception.php"
что не является включением ни по относительному пути, ни по абсолютному пути. Предполагается, что каталог фреймворка Zend был добавлен в путь включения.
В таком случае единственное практическое решение - добавить каталог в ваш путь включения.
2. SELinux
3. Symfony
Если вы используете Symfony и получаете эту ошибку при загрузке на сервер, возможно, к э ш приложения не был сброшен, либо потому, что app/cache был загружен, либо этот к э ш не был очищен.
Для этого надо выполнить следующую консольную команду:
cache:clear
4. Внутри Zip-файла символы, отличные от A SC II
По-видимому, эта ошибка может произойти также при вызове zip->close(), когда некоторые файлы внутри zip имеют в своем имени не-ASCII символы, такие как, например, «é».
Потенциальное решение - обернуть имя файла, используя utf8_decode(), перед созданием целевого файла.
Ответ 2
В дополнение к предыдущему ответу:
Программное обеспечение для виртуального хостинга
Права доступа к файлам
Ответ 3
Samba Shares
Если у вас есть тестовый сервер Linux и вы работаете из клиента Windows, общий ресурс Samba мешает команде chmod . Даже если вы используете:
chmod -R 777 myfolder
со стороны Linux вполне возможно, что Unix Group\www-data все еще не будет иметь доступ на запись. Есть рабочее решение : если ваш общий ресурс настроен так, что администраторы Windows сопоставлены с корневым каталогом – в Windows откройте разрешения, отключите наследование для вашей папки с копией, а затем предоставьте полный доступ для www-данных.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Одна из самых занимательных и полезных возможностей php - подключение другого файла. Например, на сайте есть верхнее меню, нижнее и между ними само содержание страницы. И, например, на 10 страницах сайта используется нижнее меню. В какой-то момент в него потребовалось внести изменения. В html Вы бы вручную в каждом отдельном файле вносили изменения, но php позволяет существенно упростить работу с сайтом! Код нижнего меню может содержаться в отдельном файле, а на каждой из 10-ти страниц можно просто подключать этот отдельный файл! То есть все изменения нужно теперь вносить только в файл с меню, а на 10-ти других оно будет отображаться уже с изменениями.
Смысл подключения в php простым русским языком:
Файл 1.php
Верхнее меню
Файл 2.php
Нижнее меню
Файл example.php
Подкючаем Файл 1.php
Содержание страницы
Подкючаем Файл 2.php
В результате проработки файла example.php будет отображено
Верхнее меню
Содержание страницы
Нижнее меню
Соответственно, чтобы что-либо изменить в нижнем меню, нужно внести изменения только в файле 2.php
Путь к файлу
Подключение файла происходит согласно указанному к файлу пути. Есть два варианта пути: относительный и абсолютный. Относительный - это указание пути к подлючаемому файлу относительно файла с инструкцией подключения. Абсолютный - указание полного пути к подключаемому файла.
Код PHP
include и include_once
include() - конструкция, предназначенная для включения файлов в код сценария PHP во время исполнения сценария PHP. При обработке кода инструкция заменяется на содержимое присоединяемого файла. Предлагаю сразу рассмотреть пример.
Рассмотрим работу include на примере двух файлов: index.php и text.php. Для простоты работы допустим, что они лежат в одной директории.
Код PHP (файл index.php)
Код PHP (файл text.php)
В результате работы файла index.php отобразится:
Обычный текст, содержащийся в основном файле
Текст, содержащийся в подключаемом файле
Правда удобно? Теперь, поменяв содержимое в файле text.php будет совершенно другой результат работы index.php!
Код PHP
require и require_once
Инструкции require и require_once работают идентично include и include_once за исключением лишь одной особенности - в случае того, если подключаемый файл не будет найден, выполнение скрипта будет остановлено (сценарий дальше не будет считываться), в то время как include и include_once просто выводят предупреждение и продолжают дальнейшее выполнение скрипта.
Постарайтесь в дальнейшем отказаться от использования include и require, применяйте их аналоги с суффиксом _once. В результате это упростит разбиение большой и сложной программы на относительно независимые модули. |
Если не работает include или require
Чтобы понять причины того, почему не работает include, предлагаю проверить всё по шагам. Какими бы понятными и поверхностными не были указанные ниже пункты, проверьте всё с самого начала
1. Проверьте, работает ли Ваш сервер и php, работает ли вообще любой php код на сайте
2. Убедитесь, существует ли файл подключаемый файл
3. Проверьте, правильно ли введено название файла и расширение в подключении
4. Убедитесь, что подключаемый php-файл действительно находится по тому адресу, по которому указали
5. Попробуйте указать не относительный путь, а абсолютный (полный путь к файлу).
Пример Код PHP
6. Если у Вас не подключается файл и не отображается никакой ошибки, то в директории с файлом, который подключаете, создайте файл .htaccess со следующим содержимым
или в файле php, перед подключением, вставьте следующую строку
Читайте также: