2012-06-23 3 views
1

Я пытаюсь создать PHP-скрипт, который всегда будет вызываться при каждой загрузке страницы без изменения существующего кода веб-сайта и как можно меньше дополнительных конфигураций.PHP-переадресация без влияния на заголовки

Вот моя проблема, я не хочу, чтобы она ничего не отражала в отношении фактических запросов (заголовков). Вот желаемый поток:

request-> somescript.php -> Actual назначения

Таким образом, я не могу использовать функцию заголовка(), и решение должно быть полностью на стороне сервера.

Я думал, что после того, как скрипт завершит свою задачу, он может включить/потребовать файл PHP, который был предназначен.

Любые идеи/предложения были бы действительно оценены.

С уважением,

Branden Martin

PS: Я не могу использовать php_value внутри файла .htaccess, как будет иногда использоваться в среде CGI.

Итог: Нужен код для запуска по запросу каждого сервера

+0

Итак, вы не можете изменить параметры ini, такие как ['auto_prepend_file'] (http://php.net/auto_prepend_file)? – Wiseguy

ответ

0

Вы хотите скрипт для выполнения перед любыми другими скриптами? Если используется Apache я могу думать об одном из возможных решений ... если вы можете переписать в .htaccess ...

.htaccess:

RewriteEngine On 
RewriteBase /test 
RewriteRule !(common.php) common.php/$1 

common.php:

<?php 
$request=substr($_SERVER['REQUEST_URI'],6); 
if($request==""){ 
    $request="index.php"; 
} 
if(substr($request,0,1)=="/"){ 
    // Prevent browsing local files (*nix) 
    header("HTTP/1.1 403 Forbidden",true,403); 
}else if(!file_exists($request)){ 
    // Not found 
    header("HTTP/1.1 404 Not Found",true,404); 
}else{ 
    // Request URI should be valid 
    do_what_you_want_to_do_before_anything_else(); 
    // Include the original request URI... 
    if(substr($request,-4)==".php"){ 
     include $request; 
    }else{ 
     // Prevent executing non-PHP code 
     echo file_get_contents($request); 
    } 
} 
?> 

Существует еще много кода для записи, включая меры безопасности и изменения массива $_SERVER, если это касается детских скриптов.

0

Если вы можете изменить php.ini сервера, возможно, вы можете использовать директиву auto_prepend_file?

Нужно быть осторожным: если вы добавите его непосредственно в .ini, он будет активен для всех сайтов, размещенных на этом веб-сервере. Вы также можете добавить его через php_value в apache или php-fpm, чтобы сделать это на основе каждого сайта, или вы можете создать обнаружение сайта в своем скрипте.

С точки зрения удобства в настройке, вы не можете получить его намного проще.

Смежные вопросы