php if效率,使用HTTP_IF_MODIFIED_SINCE缓存提高php执行效率

在php编程过程中,使用HTTP_IF_MODIFIED_SINCE缓存的技术我其实很少有用过,今天我突然有种感觉,用HTTP_IF_MODIFIED_SINCE缓存是否能在个别地方提高php的脚本执行效率呢。于是对个别代码进行修改。

下文中第一段脚本被每个用户通过AJAX请求调用多次,它调用不同服务器里另外一段脚本,用途是获得文本文件的最后一行,但是我认为还有很大的提升空间,进一步优化和提高效率。

AJAX 提交请求

$fileName = $_POST['textFile'];

$result = file_get_contents($_SESSION['serverURL']."fileReader.php?textFile=$fileName");

echo $result;

?>

它对外部脚本发出请求读取一个文本文件

$fileName = $_GET['textFile'];

if (file_exists('text/'.$fileName.'.txt')) {

$lines = file('text/'.$fileName.'.txt');

echo $lines[sizeof($lines)-1];

}

else{

echo 0;

}

?>

下面给出了几种优化方法

脚本1我做了如下优化:

session_start();

// added basic argument filtering

$fileName = preg_replace('/[^A-Za-z0-9_]/', '', $_POST['textFile']);

$fileName = $_SESSION['serverURL'].'text/'.$fileName.'.txt';

if (file_exists($fileName)) {

// script 2 could be pasted here

//for the entire file

//readfile($fileName);

//for just the last line

$lines = file($fileName);

echo $lines[count($lines)-1];

exit(0);

}

echo 0;

?>

脚本2可以通过缓存进行优化,但那样比较复杂。

$lastModifiedTimeStamp filemtime($fileName);

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

$browserCachedCopyTimestamp = strtotime(preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']));

if ($browserCachedCopyTimestamp >= $lastModifiedTimeStamp) {

header("HTTP/1.0 304 Not Modified");

exit(0);

}

}

header('Content-Length: '.filesize($fileName));

header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 604800)); // (3600 * 24 * 7)

header('Last-Modified: '.date('D, d M Y H:i:s \G\M\T', $lastModifiedTimeStamp));

?>

但是对于上述第2个脚本优化,如果是在内存读整个文件看似需要点额外开销,如果文件较小,这个优化方法还是不错的。但是如果文件较大,可能使用 fopen() 、 fseek() 、fread()更好些。

$filePointer = fopen($fileName, 'r');

$i = 1;

$chunkSize = 200;

do {

fseek($filePointer, -($i * $chunkSize), SEEK_END);

$line = fread($filePointer, $i++ * $chunkSize);

} while (($pos = strrpos($line, "\n")) === false);

return substr($line, $pos + 1);

本次优化主要是使用了HTTP_IF_MODIFIED_SINCE缓存的技术,通过这样优化后,程序的执行效率有没有提高呢,而服务器的性能是否也会因此而受到影响呢?虽然目前我还没有正式试验,但从程序分析上来看,优化效果肯定不错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值