САМОУЧИТЕЛЬ PHP 4



         

Эмуляция функции virtual()


Функция virtual()

работает только в том случае, если PHP установлен как модуль Apache. Проблемы начинаются, если это не так, и какой-то уже готовый сценарий интенсивно использует вызовы virtual(). Тогда мы должны будем либо переделать сценарий, либо написать эмуляцию для функции virtual() (благо в "сценарном"

варианте PHP эта функция отсутствует, так что можно без оглядки на ключевые слова создать процедуру с именем virtual()). Вот как мы здесь поступим:

if(!function_exists("virtual")) {

  // Условно определяемая функция

  function Virtual($url)

  { //* здесь должен идти код для преобразования относительного

    //* URL (заданного относительно текущего каталога) в абсолютный.

    //* Мы не будем сейчас останавливаться на этом вопросе — оставим

    //* его для 5-й части книги.

    global $HTTP_HOST,$SERVER_PORT;

    $f=@fopen("http://$HTTP_HOST:$SERVER_PORT$url","r");

    if(!$f) {

      echo "[an error ocurred while processing this directive: $url]";

      return false;

    }

    // Теперь просто читаем все и выводим с помощью echo

    while(($s=fread($f,10000))!="") echo $s;

    fclose($f);

  }

}

Обращаю ваше внимание на то, что используется не обычный fopen(), а сетевая его разновидность, на что указывает префикс http:// в имени файла. Единственное здесь сложное место — преобразование относительного URL в абсолютный. Но эта задача, конечно, вполне разрешима, и мы займемся ей уже скоро — в пятой части книги — наряду с остальными проблемами прикладного характера.




Содержание  Назад  Вперед