Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Библиотекарь 
:(
    Опции темы
georgiy11
Дата 10.10.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Есть код библиотекаря:

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 со своим сервером отрабатывает нормально без ошибок.
PM MAIL   Вверх
skyboy
Дата 10.10.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(georgiy11 @  10.10.2008,  16:19 Найти цитируемый пост)
А NuSphere PhpED со своим сервером отрабатывает нормально без ошибок. 

очевидно, что либо версии серверов(в PHPEd Apache используется, да?), либо httpd.conf, либо php.ini отличаются настолько, что:
- либо в .htaccess не обрабатывается php_auto_prepend_file(запрещено) или даже вообще все директивы, включая php_value
- либо путь, задаваемый директивой недоступен(сервер/РНР запущены из-под пользователя без прав доступа)
в любом случае, непонятно, зачем такие танцы, если можно просто добавить в код "include_once(<путь к файлу>);" и все обязано работать как часы...
и уж совсем неясно, где информация из лога ошибок(error.log), потому как "ошибка 500" говорит одновременно о многом(о серьезности ошибки) и ни о чем(конкретного ничего) одновременно.
PM MAIL   Вверх
georgiy11
Дата 10.10.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 29.9.2008

Репутация: нет
Всего: нет



Ведь есть хостеры, которые настраивают систему так, чтобы инструкции include и require искали файлы только в определенных каталогах, доступа к которым у нас нет.
Сервер/PHP запускаю от себя, администратор, с полным правом доступа.ОС Windows XP.
А где просмотреть можно разрешение для php_auto_prepend_file - сами пункты?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.