рдЕрдВрддрд┐рдо-рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЗрдбрд░ рдХреНрдпрд╛ рд╣реИ?
рд╣реЗрдбрд░ рдХрд╛ рдХрд╛рд░реНрдп, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдирд╛рдо рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рд╡реЗрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╢реЛрдзрди рдХреА рддрд╛рд░реАрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИред Rfc 2616 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ "рдкреВрдЫ" рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП "рдЗрдлрд╝-рд╕рдВрд╢реЛрдзрд┐рдд-рдЪреВрдВрдХрд┐" рд╣реЗрдбрд░ рднреЗрдЬрдХрд░ рдкреГрд╖реНрда рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд╛рд░реАрдЦ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдкреГрд╖реНрда рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ "304 рдирд╣реАрдВ рд╕рдВрд╢реЛрдзрд┐рдд" рд╢реАрд░реНрд╖ рд▓реЗрдЦ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╕рд░реНрд╡рд░ "200 рдареАрдХ" рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдФрд░ рдкреГрд╖реНрда рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рдн рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░ рд╣реИрдВ: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреГрд╖реНрда рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХрдо рдбреЗрдЯрд╛ рджреЗрдЧрд╛ред

рдХреМрди рд╕реА рд╕рд╛рдЗрдЯреЗрдВ рдмреЗрд╣рддрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реИрдВ? рдЧрддрд┐рд╢реАрд▓ рдпрд╛ рд╕реНрдерд┐рд░?
рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдПрд╕рдИрдУ рдХреЗ рдмреАрдЪ рдПрдХ рдмрд╣рд╕ рд╣реБрдИ рдереА рдХрд┐ рдХреМрди рд╕реЗ рд╕рд╛рдЗрдЯреЗрдВ рдмреЗрд╣рддрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реИрдВ? рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, php, рдпрд╛ рд╕реНрдерд┐рд░ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдбрд╛рдпрдирд╛рдорд┐рдХред рд▓рд╛рд╕реНрдЯ-рдореЙрдбрд┐рдлрд╛рдЗрдб рд╣реЗрдбрд░ рдХреЛ рдЬрд╛рдирдХрд░ рдЖрдк рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рд░ рд╣реИ, рддреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реНрд╡рдпрдВ "рдЗрдлрд╝-рд╕рдВрд╢реЛрдзрд┐рдд-рдЪреВрдВрдХрд┐" рд╣реЗрдбрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреЗрдЬ рдЬреЗрдирд░реЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрддреНрддрд░ рдХреА рд╕рд╛рд░реА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рд╣реЛрддреА рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдЕрдХреНрд╕рд░ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд╣реЗрдбрд░ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдВрддрд┐рдо-рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЗрдбрд░ рд╕реНрдкреАрдб рдЕрдк рд╕рд░реНрдЪ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ?
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдпреИрдВрдбреЗрдХреНрд╕ рдХреА рдорджрдж рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ , тАЬрд░реЛрдмреЛрдЯ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓ рдкрд╛рдПрдЧреА рдХрд┐ рд╕рд╛рдЗрдЯ рдХрд╛ рдкреГрд╖реНрда рдЕрдВрддрд┐рдо рдЕрдиреБрдХреНрд░рдордг рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдФрд░ рдЪреВрдВрдХрд┐ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рд╛рдЗрдЯ рд╕реЗ рд░реЛрдмреЛрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рд╣реИ, рдмрджрд▓реЗ рд╣реБрдП рдкреГрд╖реНрдареЛрдВ рдХреЛ рдХрдо рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред "
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдПред 10 рд╣рдЬрд╛рд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЗрдЯ рд╣реИред рд╕рд╛рдЗрдЯ рдХреЛ php рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд▓рд╛рд╕реНрдЯ-рдореЙрдбрд┐рдлрд╛рдЗрдб рд╣реИрдбрд░ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЦреЛрдЬ рд░реЛрдмреЛрдЯ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдЕрдиреБрдХреНрд░рдордг рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рд╛рдЗрдЯ рдХрд╛ рдкреГрд╖реНрда рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ? рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ !!! рдФрд░ рди рдХреЗрд╡рд▓ рд╡реЗ рдЬреЛ рдмрджрд▓ рдЧрдП рд╣реИрдВред
рдмреЗрд╢рдХ! рдХрдИ рд╕рд╛рдЗрдЯреЗрдВ рд╕рд╛рдЗрдЯрдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдЯрдореИрдк рдПрдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИ, рдЦреЛрдЬ рдЗрдВрдЬрди рдЕрдиреБрдХреВрд▓рдХ рдХрд╛ рдорджрдж рдХрд░реЗрдВред рдпрд╣ рдЕрдВрддрд┐рдо-рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!
рдЕрдВрддрд┐рдо рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЗрдбрд░ рдХреЛ php рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ рд╕рдВрднрд╛рд▓рдирд╛
рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП php-backend рдХреЛ if-modified-рдЪреВрдБрдХрд┐ рд╣реЗрдбрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП!
Nginx + php рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП
location ~ \.php$
{
тАж
if_modified_since off;
fastcgi_pass fcgi;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /< > /web$fastcgi_script_name;
тАж
fastcgi_pass_header Last-Modified;
include fastcgi_params;
}
* This source code was highlighted with Source Code Highlighter .
рдПрдкрд╛рдЪреЗ + php рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕рд▓рд┐рдП
# If-Modified-Since ( if php is not installed as cgi then comment lines below)
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
* This source code was highlighted with Source Code Highlighter .
рдЕрдЧрд░ php рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!
рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ php рдХреЛрдб
$qtime = isset($_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ])? $_SERVER[ 'HTTP_IF_MODIFIED_SINCE' ]: '' ;
$modified = substr(gmdate( 'r' , $timestamp), 0, -5). 'GMT' ;
if ($hdr == $modified)
{
header ( "HTTP/1.1 304 Not Modified " );
header ( "Last-Modified: $modified" );
exit();
}
header ( "Last-Modified: $modified" );
//render
* This source code was highlighted with Source Code Highlighter .
рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЖрдИрдПрдл-рдореЙрдбрд┐рдлрд╛рдИрдб-рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░реЗрдВ
рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реЗрдбрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрдВрддреНрд░ рд╣реИред рд╕рднреА рдбреЗрд╡рд▓рдкрд░ рдХреА рдЬрд░реВрд░рдд sfWebResponse рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реЗрдбрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдврд╛рдВрдЪрд╛ рд╕рдм рдХреБрдЫ рдЦреБрдж рдХрд░реЗрдЧрд╛ред
$datestamp = time();
$response->setHttpHeader( 'Last-Modified' , $response->getDate($datestamp));
* This source code was highlighted with Source Code Highlighter .
рдЪреВрдВрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдордЧреНрд░реА рдЖрдорддреМрд░ рдкрд░ рдкреГрд╖реНрда рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рдЬреЛ рдкреНрд░реЗрд╖рд┐рдд рд╣реЗрдбрд░ рдХреЗ рдирд╡реАрдирддрдо рд╕реЗрдЯ рдХрд░рддреА рд╣реИ!
static public function setLastModified($datestamp)
{
$response = sfContext::getInstance()->getResponse();
$request = sfContext::getInstance()->getRequest();
if (is_array($datestamp))
{
rsort($datestamp, SORT_NUMERIC);
$datestamp = $datestamp[0];
}
if (!$response->hasHttpHeader( 'Last-Modified' ))
{
$response->setHttpHeader( 'Last-Modified' , $response->getDate($datestamp));
}
else
{
$origLastModified = strtotime($response->getHttpHeader( 'Last-Modified' ));
if ($origLastModified < $datestamp)
$response->setHttpHeader( 'Last-Modified' , $response->getDate($datestamp));
}
}
* This source code was highlighted with Source Code Highlighter .
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрда рдХрд╛ рдЕрдВрддрд┐рдо 3 рд╡реАрдбрд┐рдпреЛ, рдЕрдВрддрд┐рдо 3 рд▓реЗрдЦ рдФрд░ рдХреБрдЫ рднреА рд╣реЛ рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдХреЗ, рд╣рдо рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрддрддрдГ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд╡реАрдирддрдо рд╕рдВрд╢реЛрдзрди рддрд┐рдерд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣реЗрдбрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб sfCacheFilter.class.php рд╡рд░реНрдЧ рдореЗрдВ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓рд╛рд╕реНрдЯ-рдореЙрдбрд┐рдлрд╛рдЗрдб рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рд╛рдЗрдЯ рдореЗрдВ 5 рд╣рдЬрд╛рд░ рдкреГрд╖реНрда рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рд╣реА рдмреНрд▓реЙрдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдмрджрд▓рддреА рд╕рд╛рдордЧреНрд░реА рд╣реИ, рддреЛ рд╢реАрд░реНрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрдХрд╛рд░ рд╣реЛрдЧрд╛! рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реЗрдбрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░реЛрдмреЛрдЯ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП, рд░реЛрдмреЛрдЯ рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЦреИрд░, рдпрд╛ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ;)ред
рдЕрднреА рддрдХ,
рдЖрдк рдпрд╣рд╛рдВ рдпрд╛ рддреЛ рд╣реЗрдбрд░ рдХреЗ рд╕рд╣реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
<?php
$ch = curl_init();
$url = 'http://site.ru/1.php ' ;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true );
curl_setopt($ch, CURLOPT_NOBODY, true );
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'If-Modified-Since: Sun, 28 Nov 2010 15:45:53 GMT'
));
ob_start();
curl_exec ($ch);
curl_close ($ch);
$data = ob_get_contents();
ob_end_clean();
echo nl2br($data);
?>
* This source code was highlighted with Source Code Highlighter .