Gözlenen bir fopen ('http:// ...') tarafından erişilen içeriğin önbelleğe alma ve posteri ile ilgili Q PHP kendi önbelleğe alma mekanizması uygulamak olmadığını merak ettiniz mi? Diğer cevaplar bazı spekülasyonlar dahil, ama kesinlikle öğrenmek için en kolay yolu, sistem üzerinde ne olup bittiğini görmek için çağırır instrumenting kaynak koduna bakarak ya da belki daha kolay tarafından kontrol etmektir? Bu, aşağıdaki gibi Debian sistemlerinde yapmak saçmadır:
$ echo "Hello World" > /var/www/xx.txt
$ strace -tt -o /tmp/strace \
> php -r 'echo file_get_contents("http://localhost/xx.txt");'
Hello World
Ben aşağıda strace günlüğünün ilgili özü dahil ama ne bunu göstermektedir PHP RTS sadece, localhost:80 bağlayan bir "GET / xx.txt" gönderir, başlıkları ve dosya içeriğini içeren bir yanıt alır olduğunu ettik ki bu daha sonra STDOUT yankıları.
Kesinlikle hiçbir istemci tarafında önbelleğe alma PHP RTS içinde gerçekleşir ve bu doğrudan HTTP soket diyaloğu yapıyor beri, bu önbelleğe alma istemci üzerinde meydana geldiği tasavvur etmek zordur. Biz sunucu tarafında veya ara proxy önbelleğe alma olasılığı kalır. (Ben bir txt dosyaları Access + 7 gün sona varsayılan Not).
Logfile Extract
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, F_SETFL, O_RDWR) = 0
00:15:41.888975 sendto(3, "GET /xx.txt HTTP/1.0\r\n", 22, MSG_DONTWAIT, NULL, 0) = 22
00:15:41.889172 sendto(3, "Host: localhost\r\n", 17, MSG_DONTWAIT, NULL, 0) = 17
00:15:41.889307 sendto(3, "\r\n", 2, MSG_DONTWAIT, NULL, 0) = 2
00:15:41.889437 poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
00:15:41.889544 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
00:15:41.891066 recvfrom(3, "HTTP/1.1 200 OK\r\nDate: Wed, 15 F"..., 8192, MSG_DONTWAIT, NULL, NULL) = 285
00:15:41.891235 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
00:15:41.908909 recvfrom(3, "", 8192, MSG_DONTWAIT, NULL, NULL) = 0
00:15:41.909016 poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
00:15:41.909108 recvfrom(3, "", 8192, MSG_DONTWAIT, NULL, NULL) = 0
00:15:41.909198 close(3) = 0
00:15:41.909323 write(1, "Hello World\n", 12) = 12
00:15:41.909532 munmap(0x7ff3866c9000, 528384) = 0
00:15:41.909600 close(2) = 0
00:15:41.909648 close(1) = 0