|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-09-14 11:47 UTC] mfp@php.net
Description:
------------
I am using file_get_contents with a URL. If the file I want to get is 255 bytes I get it fine. If it is 256 bytes or more, up to some upper limit which is somewhere around 3.5K, I get an empty string.
Although I have only illustrated it with file_get_contents(), from the circumstances in which I first noticed odd behaviour I think it also applies generally to files opened with fopen().
Incidentally, the right number of bytes are coming from the web server, as the apache access log shows it is delivering 256 bytes:
127.0.0.1 - - [14/Sep/2006:12:34:37 +0100] "GET /MyService/AddressBook/info.xsd HTTP/1.0" 200 256
Reproduce code:
---------------
echo file_get_contents('http://localhost/MyService/AddressBook/info.xsd');
where the target file info.xsd is 256 bytes long
Expected result:
----------------
the contents of the file
Actual result:
--------------
nothing - empty string
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 10:00:01 2025 UTC |
Errr... I am not sure how seriously to take the response "[14 Sep 11:51am UTC] tony2001@php.net", but here goes: 1. The reproduce code is: <?php echo file_get_contents('http://localhost/MyService/AddressBook/info.xsd'); ?> 2. I do not know how to supply a test script that does not rely on external resources since this problem occurs reading a URL and almost by definition a URL is an external resource.Please upload the file somewhere and put the link here. Make sure you're looking into the source of the page or even better try it with CLI. I cannot reproduce anything like that: var_dump(file_get_contents("http://tony2001.phpclub.net/dev/tmp/info.xsd")); works like a charm with any PHP version I have here (and I have a lot of them).Sorry, I didn't mean to be rude with "not sure how seriously" - it looked like a boilerplate text and I thought it might be an automated response. And because it was just the size of the file that mattered I didn't think to put a copy of it in the defect; but I should have made that clearer. Anyway, I am baffled. When I use file_get_contents to go for your file remotely it works fine, but if I put your file on my machine and go for it with localhost it goes wrong. I am running Apache/2.0.59 (Win32) PHP/5.1.6, by the way. I have got two files, one with 255 a's and one with 256 - which is the file that you put up. CURL gets correct contents and byte counts, file_get_contents does not. The Apache access log claims it is returning 255 and 256 bytes each time, though. I am running it with CLI. Here is my test now, comparing CURL with file_get_contents: <?php $buf = file_get_contents('http://localhost/255as.file'); echo strlen($buf) . "\n"; $buf = file_get_contents('http://localhost/256as.file'); echo strlen($buf) . "\n"; $curl_handle=curl_init(); curl_setopt($curl_handle,CURLOPT_URL,'http://localhost/255as.file'); curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,true); $buf = curl_exec($curl_handle); curl_close($curl_handle); echo strlen($buf) . "\n"; $curl_handle=curl_init(); curl_setopt($curl_handle,CURLOPT_URL,'http://localhost/256as.file'); curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,true); $buf = curl_exec($curl_handle); curl_close($curl_handle); echo strlen($buf) . "\n"; ?> It relies on the two files 255as.file and 256as.file being in the local server's docroot. The output I get is: 255 0 255 256 The Apache access log says: 127.0.0.1 - - [14/Sep/2006:17:43:31 +0100] "GET /MyService/AddressBook/255as.file HTTP/1.0" 200 255 127.0.0.1 - - [14/Sep/2006:17:43:31 +0100] "GET /MyService/AddressBook/256as.file HTTP/1.0" 200 256 127.0.0.1 - - [14/Sep/2006:17:43:32 +0100] "GET /MyService/AddressBook/255as.file HTTP/1.1" 200 255 127.0.0.1 - - [14/Sep/2006:17:43:32 +0100] "GET /MyService/AddressBook/256as.file HTTP/1.1" 200 256 If you were able to point me to the right routine in PHP I could add a bit of diagnostic code and rebuild...or if I can help in any other way. My colleague, who has a very similar set up (but running 5.1.4) sees the same thing on her machine, completely independent of mine, by the way.Does this work for you: var_dump(file_get_contents("http://tony2001.phpclub.net/dev/tmp/info.xsd")); ?