加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP的http流包装缓存文件?细节?

发布时间:2020-12-13 22:03:15 所属栏目:PHP教程 来源:网络整理
导读:我正在寻找有关 PHP的http流包装器是否以及如何尝试缓存文件的信息.任何人都可以指出这方面的信息吗? 这个问题的答案,Does PHPs fopen function implement some kind of cache?,表明包装器可能会尝试尊重缓存头,但我没有在文档中找到任何关于此的内容. 具体
我正在寻找有关 PHP的http流包装器是否以及如何尝试缓存文件的信息.任何人都可以指出这方面的信息吗?

这个问题的答案,Does PHPs fopen function implement some kind of cache?,表明包装器可能会尝试尊重缓存头,但我没有在文档中找到任何关于此的内容.

具体来说,我想知道:

> PHP缓存文件是否会访问http:// urls.
>如果确实如此,它会保留多长时间?
>缓存的最大大小是多少?
>每个文件的最大大小是否会缓存?
>缓存是否在请求之间保持不变?
>出于好奇,它会在内存或磁盘上缓存吗?哪里?

解决方法

简短回复:Q1 No. Q2-5不适用.

更长的响应:Does PHPs fopen function implement some kind of cache?中的答案是错误的 – 至少对于Linux而言,因为这个PHP代码库对于WinXXX也是常见的.

这与我的理解相反,所以我检查而不是猜测:

$echo "Hello World" > /var/www/xx.txt
$php -r 'echo file_get_contents("/var/www/xx.txt");'
Hello World
$strace -tt -o /tmp/strace  
> php -r 'echo file_get_contents("http://localhost/xx.txt");'
Hello World

并查看系统跟踪日志.这是相关的切口:

00:15:41.887904 socket(PF_INET6,SOCK_STREAM,IPPROTO_IP) = 3
00:15:41.888029 fcntl(3,F_GETFL)       = 0x2 (flags O_RDWR)
00:15:41.888148 fcntl(3,F_SETFL,O_RDWR|O_NONBLOCK) = 0
00:15:41.888265 connect(3,{sa_family=AF_INET6,sin6_port=htons(80),inet_pton(AF_INET6,"::1",&sin6_addr),sin6_flowinfo=0,sin6_scope_id=0},28) = -1 EINPROGRESS (Operation now in progress)
00:15:41.888487 poll([{fd=3,events=POLLIN|POLLOUT|POLLERR|POLLHUP}],1,60000) = 1 ([{fd=3,revents=POLLOUT}])
00:15:41.888651 getsockopt(3,SOL_SOCKET,SO_ERROR,[0],[4]) = 0
00:15:41.888838 fcntl(3,O_RDWR) = 0
00:15:41.888975 sendto(3,"GET /xx.txt HTTP/1.0rn",22,MSG_DONTWAIT,NULL,0) = 22
00:15:41.889172 sendto(3,"Host: localhostrn",17,0) = 17
00:15:41.889307 sendto(3,"rn",2,0) = 2
00:15:41.889437 poll([{fd=3,events=POLLIN|POLLPRI|POLLERR|POLLHUP}],0) = 0 (Timeout)
00:15:41.889544 poll([{fd=3,events=POLLIN|POLLERR|POLLHUP}],revents=POLLIN}])
00:15:41.891066 recvfrom(3,"HTTP/1.1 200 OKrnDate: Wed,15 F"...,8192,NULL) = 285
00:15:41.891235 poll([{fd=3,revents=POLLIN}])
00:15:41.908909 recvfrom(3,"",NULL) = 0
00:15:41.909016 poll([{fd=3,revents=POLLIN}])
00:15:41.909108 recvfrom(3,NULL) = 0
00:15:41.909198 close(3)                = 0
00:15:41.909323 write(1,"Hello Worldn",12) = 12
00:15:41.909532 munmap(0x7ff3866c9000,528384) = 0
00:15:41.909600 close(2)                = 0
00:15:41.909648 close(1)                = 0

对localhost的GET请求,响应,对STDOUT的回显和关闭.没有缓存.纳达.抱歉.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读