Improve error reporting on downloads and copies, refs #1228

main
Jordi Boggiano 12 years ago
parent 247d1aca41
commit 852c369575

@ -61,10 +61,10 @@ EOT
unset($phar); unset($phar);
rename($tempFilename, $localFilename); rename($tempFilename, $localFilename);
} catch (\Exception $e) { } catch (\Exception $e) {
@unlink($tempFilename);
if (!$e instanceof \UnexpectedValueException && !$e instanceof \PharException) { if (!$e instanceof \UnexpectedValueException && !$e instanceof \PharException) {
throw $e; throw $e;
} }
unlink($tempFilename);
$output->writeln('<error>The download is corrupted ('.$e->getMessage().').</error>'); $output->writeln('<error>The download is corrupted ('.$e->getMessage().').</error>');
$output->writeln('<error>Please re-run the self-update command to try again.</error>'); $output->writeln('<error>Please re-run the self-update command to try again.</error>');
} }

@ -103,14 +103,17 @@ class RemoteFilesystem
$this->io->write(" Downloading: <comment>connection...</comment>", false); $this->io->write(" Downloading: <comment>connection...</comment>", false);
} }
$errorMessage = null; $errorMessage = '';
set_error_handler(function ($code, $msg) use (&$errorMessage) { set_error_handler(function ($code, $msg) use (&$errorMessage) {
$errorMessage = preg_replace('{^file_get_contents\(.+?\): }', '', $msg); if ($errorMessage) {
if (!ini_get('allow_url_fopen')) { $errorMessage .= "\n";
$errorMessage = 'allow_url_fopen must be enabled in php.ini ('.$errorMessage.')';
} }
$errorMessage .= preg_replace('{^file_get_contents\(.*?\): }', '', $msg);
}); });
$result = file_get_contents($fileUrl, false, $ctx); $result = file_get_contents($fileUrl, false, $ctx);
if ($errorMessage && !ini_get('allow_url_fopen')) {
$errorMessage = 'allow_url_fopen must be enabled in php.ini ('.$errorMessage.')';
}
restore_error_handler(); restore_error_handler();
// fix for 5.4.0 https://bugs.php.net/bug.php?id=61336 // fix for 5.4.0 https://bugs.php.net/bug.php?id=61336
@ -146,9 +149,17 @@ class RemoteFilesystem
// handle copy command if download was successful // handle copy command if download was successful
if (false !== $result && null !== $fileName) { if (false !== $result && null !== $fileName) {
$result = (bool) @file_put_contents($fileName, $result); $errorMessage = '';
set_error_handler(function ($code, $msg) use (&$errorMessage) {
if ($errorMessage) {
$errorMessage .= "\n";
}
$errorMessage .= preg_replace('{^file_put_contents\(.*?\): }', '', $msg);
});
$result = (bool) file_put_contents($fileName, $result);
restore_error_handler();
if (false === $result) { if (false === $result) {
throw new TransportException('The "'.$fileUrl.'" file could not be written to '.$fileName); throw new TransportException('The "'.$fileUrl.'" file could not be written to '.$fileName.': '.$errorMessage);
} }
} }

Loading…
Cancel
Save