С этим кодом PHP будет ждать, прежде чем продолжить? - PullRequest
0 голосов
/ 25 апреля 2019

Я создаю mysqldump с php, а затем хотел бы, чтобы файл был загружен и в конечном итоге удален после этого.

Меня беспокоит то, что PHP не будет ждать завершения system($command); до readfile($backup_file); и что unlink($backup_file); удалит до того, как все будет выполнено, особенно для очень больших баз данных.

Я понимаю, что PHP однопоточный и что system($command) выдаст код выхода, но означает ли этот код выхода простоPHP передал команду для обработки или это означает, что PHP будет ждать завершения MYSQL?

Вот код:

$backup_file = $backupDir.$devDB."-".date("Y-m-d-H-i").'.gz';
$command = "mysqldump --opt -h $DbHost -u$DbUser -p$DbPassword $devDB | gzip > $backup_file";
system($command);

if (file_exists($backup_file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($backup_file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($backup_file));

    readfile($backup_file);
    unlink($backup_file);
    exit;

1 Ответ

1 голос
/ 25 апреля 2019

Вполне возможно, что у вас истечет время ожидания, если вы выполняете это на веб-сервере, но PHP работает синхронно, поэтому он никогда не достигнет readfile () до возврата system ().

Так каквы не отправили ничего в фоновый режим с вашей командой, нет ничего, что заставит system () возвращаться до выполнения команды.Реальная проблема в том, что у вас нет проверки ошибок, кроме проверки, существует ли файл, поэтому вам следует проверить код завершения, чтобы убедиться, что mysqldump и gzip успешно выполнены.

Я также хотел бы убедиться, что вы учитываете последствия безопасностииспользование пароля в качестве аргумента командной строки на общих серверах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...