PHP Get File Size of Remote File
By Brian on Nov 06, 2009 with Comments 35
Previously in a post I made for uploading a file from URL we wanted to include a file size check to make sure the file wasn’t too big before we upload it. Here I’ll show you how to get the remote file’s size and other information before doing other functions with it.
We’ll do this through a simple form. By default a form will encode all characters and convert spaces to “+” so we will leave the enctype undefined.
Then we just need the text input named “url” which I gave a default value “Enter URL Here…” and the Javascript-related attribute – onfocus. So when you focus on the text input it will change from the default value to blank.
Finally of course, we include the submit input named “submit” with the value “Submit.” We will use this value to check that the form was submitted.
<form action="getinfo.php" method="post">
<input type="text" name="url" size="40" value="Enter URL Here..." onfocus="if(this.value == 'Enter URL Here...') this.value = '';" /> <input type="submit" name="submit" value="Submit" />
</form>This HTML form will submit the entered url to getinfo.php.
We are going to the function fopen() to get the information we need from the remote file. There is one thing to be aware of using fopen() to retrieve this data. You need to be sure the fopen wrappers is enabled in your php.ini. This can not be changed using ini_set().
We are going to create a variable “contents” and add each line of the file to it as we read it. Then we will use the function mb_strlen() to get the file size of the variable. Normally we would use strlen(), however that will only read one character as one byte. That doesn’t really give you the most accurate reading if you have special characters in the file which are more than one byte.
By default the function fgets() reads each line of a file 1024 bytes at a time. The function runs until either the specified length is reached (1024 bytes) or to the end of the file. It is more resource efficient to specify a read length:
“Until PHP 4.3.0, omitting it would assume 1024 as the line length. If the majority of the lines in the file are all larger than 8KB, it is more resource efficient for your script to specify the maximum line length.” – php.net
getinfo.php
<?php
// getinfo.php
if($_POST["submit"]){
// Form is submitted.
// Check the fopen wrapper settings in php.ini
if (ini_get("allow_url_fopen") == 1) {
// Open the file.
$file = fopen(trim($_POST["url"]), "r");
if($file){
// We got the file.
$contents = "";
while($line = fgets($file,1024)){
// Write each line to the string contents a kilobyte at a time.
$contents .= $line;
}
$filesize = mb_strlen($contents,"8bit");
$kb = $filesize / 1024; // Returns the file size in kilobytes
echo "<strong>File Size</strong>: ".$filesize." bytes or ".$kb." kilobytes.";
} else {
echo "Remote file not found.";
}
} else {
echo "Fopen wrappers not enabled.";
}
}
?>The page will display the file size in bytes and kilobytes, as so:
File Size: 1024 bytes or 1 kilobytes.
Popularity: 14% [?]
Filed Under: PHP • Tutorials • Web Programming




this website is totally awesome.
Great info, thanks for useful post. I’m waiting for more
Great material – Thanks for posting that advice, I think that it basically answers my concern.
Hmmm…great to find out, there were without a doubt two or three items which I hadn’t thought of before.
thank you for posting this one up..it is very interesting
Great post. Hope to see much more great posts in the future.
I definitely knew about most of this, but even so, I still found it helpful. Great work!
I just wanted to comment and say that I really enjoyed reading your blog post here. It was very informative and I also digg the way you write! Keep it up and I’ll be back to read more in the future
Super-Duper site! I am loving it!! Will come back again – taking your feeds also, Thank you.
Thanks for publishing this, I found it to be really educational, and it answered almost all of the questions I had.
Webmasters are under appreciated, thank you for taking the time to post this.
Great text and nice site.
I can’t find how to subscribe to the comments via feedburner. I want to keep up to date on this, how do I do that?
I couldn’t resist commenting.
I enjoyed reading your interesting yet very informative insights. I am looking forward to reading more of your most recent articles and blogs.
Thank you for such a fantastic blog. Where else could one get this kind of info written in such an …
I tried to subscribe to your rss feed, but had a problem adding it to google reader. Could you please check this out.
Here’s a comment. Great advice =) Thanks
This really is an excellent article, but I was questioning how do I suscribe for the RSS feed?
Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me.