Create necessary directories first to save the HTML

This commit is contained in:
Jonny Barnes 2016-09-21 14:18:58 +01:00
parent 5758380968
commit c9d5e6d628

View file

@ -36,25 +36,35 @@ class DownloadWebMention implements ShouldQueue
*/
public function handle(Client $guzzle)
{
$response = $guzzle->request('GET', $source);
$response = $guzzle->request('GET', $this->source);
//4XX and 5XX responses should get Guzzle to throw an exception,
//Laravel should catch and retry these automatically.
if ($response->getStatusCode() == '200') {
$filesystem = \Illuminate\FileSystem\FileSystem();
$filename = storage_path() . '/HTML/' . $this->createFilenameFromURL($source);
$filesystem = new \Illuminate\FileSystem\FileSystem();
$filename = storage_path() . '/HTML/' . $this->createFilenameFromURL($this->source);
//backup file first
$filenameBackup = $filename . '.' . date('Y-m-d') . '.backup';
if ($filesystem->exists($filename)) {
$filesystem->copy($filename, $filenameBackup);
}
//check if base directory exists
if (!$filesystem->exists($filesystem->dirname($filename))) {
$filesystem->makeDirectory(
$filesystem->dirname($filename),
0755, //mode
true //recursive
);
}
//save new HTML
$filesystem->put(
$filename,
(string) $response->getBody()
);
//remove backup if the same
if ($filesystem->get($filename) == $filesystem->get($filenameBackup)) {
$filesystem->delete($filenameBackup);
if ($filesystem->exists($filenameBackup)) {
if ($filesystem->get($filename) == $filesystem->get($filenameBackup)) {
$filesystem->delete($filenameBackup);
}
}
}
}
@ -68,11 +78,11 @@ class DownloadWebMention implements ShouldQueue
*/
private function createFilenameFromURL($url)
{
$url = str_replace(['https://', 'http://'], ['https/', 'http/'], $url);
if (substr($url, -1) == '/') {
$url = $url . 'index.html';
$filepath = str_replace(['https://', 'http://'], ['https/', 'http/'], $url);
if (substr($filepath, -1) == '/') {
$filepath .= 'index.html';
}
return $url;
return $filepath;
}
}