Storing a page from a website is possible with the build-in copy function of PHP. Unfortunately this does not always work. This page shows how you can investigate where the problem is.
Troubeshooting
It is necessary that allow_url_fopen is enabled. You can check this with the following script. Just save it as a file on your webserver and run it.
<?php
if (ini_get('allow_url_fopen')) {
echo 'I can handle urls';
} else {
echo 'I cannot handle urls. Trying to enable url handling...';
ini_set('allow_url_fopen', true);
if (ini_get('allow_url_fopen')) {
echo ' --- succeeded.
';
} else {
echo ' --- failed.
';
}
}
You should see something like
- I can handle urls – this is fine, everything should be working
- I cannot handle urls. Trying to enable url handling… – url handling is not enabled by your webhoster / your php configuration in php.ini.
— succeeded. – url handling had been enabled, lucky guy!
— failed. – url handling could not be enabled, will be the default case. Bad luck, look for another webhoster that allows this (or change your php.ini settings).
Work-a-round
Also known as a hack, quick and dirty solution, workaround, we simulate the copy function. Just use the following function instead of the build-in php copy function.
function storeUrlToFilesystem($url, $localFile) {
try {
$data = file_get_contents($source);
$handle = fopen($destination, "w");
fwrite($handle, $data);
fclose($handle);
return true;
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
return false;
}
You can use it like this:
<?php
$source = 'http://www.google.com';
$destination = 'internet.txt';
if (storeUrlToFilesystem($source, $destination)) {
echo 'Download of the whole web to '.$destination.' succeeded.';
}
Hope this helps.
Licensing: just use this as you wish. Links are always great. 🙂
