Есть код библиотекаря:
library.php
Код |
if(!defined("LIBRARY_IS_LOAD")) //Библиотека загружена define("LIBRARY_IS_LOAD",1); //Расширение библиотечных файлов по умолчанию define("DefaultExt","lib"); //Пути поиска по умолчанию $INC_DIRS = array(".","./lib","./include"); //Преобразует относительный путь в абсолютный function absolute_path($path,$cur_path) { //Заменим обратные слэши прямыми $path = strtr(trim($path),"\\","/"); //Теперь разобьём путь по прямым слэшам $APaths = explode("/",$path); /** * Если указан текущий каталог, то путь поиска (Search) равен этому * каталогу.В противном случае используем текущий каталог (getcwd()). */ if($cur_path === ""){ $Search = getcwd(); }else{ $Search = $cur_path; } foreach($APaths as $k=>$v){ if($v != "."){ if(!$k && (strlen($v)>1&&$v[1]===":"||$v==="")) $Search = $v; elseif($v===".."){ if(strlen($Search)>1 && $Search[1]===":") continue; $p=dirname($Search); if($p==="/"||$p==="\\"||$p===".") $Search=""; else $Search = $p; } elseif($v!=="") $Search = $Search."/$v"; } } return ($Search!=="" ? $Search : "/"); } //Преобразует URL в абсолютный путь function UrlToPath($path) { $URL = dirname("$SCRIPT_NAME"); $cURL = absolute_path(trim($path),$URL); return getenv("DOCUMENT_ROOT").$cURL; } //Преобразуем все пути в массиве $INC_DIRS в абсолютные function AbsoluteInclude() { static $DIR = ""; global $INC_DIRS; if($DIR !== $INC_DIRS){ for($i=0; $i<count($INC_DIRS);$i++) { $value = &$INC_DIRS[$i]; if($value[0]==="." && (strlen($value)==1 || $value[1]==='\\'||$value[1]==='/')) continue; $value=absolute_path($value); } $DIR = $INC_DIRS; } } function Load($library) { global $INC_DIRS; static $DIR, $Last = 0; AbsoluteInclude(); $l = $Last; do{ $dir =$INC_DIRS[$Last]; if(@is_file($f="$dir/$library.".DefaultExt)){ $cwd = getcwd(); chdir(dirname($f)); } foreach($GLOBALS as $k=>$v) { $res = include_once($f); AbsoluteInclude(); chdir($cwd); return $res; } $Last = ($Last+1)%count($INC_DIRS); }while($Last != $l); } error_reporting(E_ALL); //После последнего тэга >? не должно быть пробелов или иных символов ?>
|
Использующий его скрипт:
mod.php
Код | <?php
include "library.php";
Load("unit");
func(); ?>
|
Подключаемый файл:
unit.lib
Код | <?php
function func() { $SCRIPT_NAME = $_SERVER['SCRIPT_NAME']; echo "Sample function from $SCRIPT_NAME library"; phpinfo(); }
?>
|
Так вот для автоматического подключения модуля(library.php) используется файл .htaccess, в корневом каталоге виртуального Web-сервера, его содержание такое:
.htaccess
Код | <IfModule mod_charset.c> CharsetRecodeMultipartForms off # и другие директивы mod_charset </IfModule> php_auto_prepend_file /home/localhost/www/library.php
|
Денвер отображает ошибки типа
Код | Вероятнее всего, скрипт, который запускает данная страница, не смог корректно выполниться. Детально причины ошибки должны быть описаны в файле /error.log.
Вот наиболее частые причины 500-й ошибки:
* В скрипте имеются ошибки. Например, каждый скрипт должен выводить заголовок Content-Type перед началом печати страницы. Подробнее об этом читайте в статье Борьба с 500-й Ошибкой закончилась.
Корректные пути к CGI-директориям следующие:
* Вы не установили некоторые библиотеки, которые необходимы скрипту. Для Perl-скриптов: установите пакет с библиотеками Perl, который доступен по адресу http://dklab.ru/chicken/web/packages/perl.html. * Вы указали неправильную первую строчку в скрипте, по которой Apache определяет путь к интерпретатору. Первая строка должна быть: o для Perl:
#!/usr/bin/perl -w
или
#!/usr/local/bin/perl -w
o для PHP:
#!/usr/bin/php
или
#!/usr/local/bin/php
Здесь указывается путь относительно корня до файлов perl.exe и php.exe соответственно (расширение exe и буква диска опускаются для совместимости с Unix). Проверьте, чтобы до этой строке в скрипте ничего не было (в том числе и комментариев).
Хотя Денвер поддерживает оба варианта, заметьте также, что PHP-скрипты удобнее запускать из-под mod_php, встроенного в Apache, а не через внешнюю программу php.exe. Для использования mod_php просто поместите PHP-скрипт в www-директорию (а не в директорию с CGI-скриптами). * В текущей директории расположен файл .htaccess с ошибочными директивами. Например, Apache в Денвере не поддерживает устаревший модуль mod_charset, имеющийся у некоторых хостеров, и расценивает директивы вроде CharsetDisable как ошибочные. Для того, чтобы исправить ситуацию, отредактируйте файл .htaccess, чтобы он выглядел примерно так:
<IfModule mod_charset.c> CharsetRecodeMultipartForms off # и другие директивы mod_charset </IfModule>
|
А NuSphere PhpED со своим сервером отрабатывает нормально без ошибок. |