いつもお世話になっております。
アプリケーションサーバ上からPHPでデータベースサーバに対しmysqldumpを実行させ、
帰ってきたsqlファイルをアプリケーションサーバ及び、ローカルにDLしたいのですが、
ファイル生成されるものの、空ファイルが生成されるので困っています。
初歩的な質問かもしれませんが、アドバイスいただけると幸いです。
やりたいこと
データベースサーバのデータベースのバックアップを取り、ファイルとして、アプリケーションサーバとローカルにDLしたい。
発生している問題
指定したディレクトリにファイルは生成される且つ、ローカルにDLもされるがファイルは0kbの空ファイルになってしまう。
試したこと
・php.iniのupload_max_filesize=500Mに設定
・保存先ディレクトリのパーミッションを757に変更
・下記ソースコードを?>でとじないでexit;を記述してみる...etc.
インターネットで調べてみて、様々なサイトに書いてある解決方法を記述してみましたが解決せず…
現状は下記ソースコードの形で詰まってしまいました。
ソースコード
PHP
1<?php 2 3 ini_set( 'display_errors', 1 );//エラー表示 4 5 $dbHost = "/*データベースサーバのIPアドレスを入力しています*/"; 6 $dbUser = "/*ユーザ名を入力しています*/"; 7 $dbPass = "/*パスワードを入力しています*/"; 8 $dbName = "/*データベースの名前を入力しています*/"; 9 10 $filePath = "../DBBackup/"; 11 $fileName = date('ymd').'_'.date('His').'.sql'; 12 $command = "mysqldump ".$dbName." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$filePath.$fileName; 13 system($command); 14 15 //保存したらダウンロード 16 $dlFile = $filePath . $fileName; //ファイルパス 17 header('Content-Type: application/force-download'); //ダウンロードの指示 18 header('Content-Disposition: attachment; filename="' . $fileName . '"'); //ダウンロードするファイル名 19 header('Content-Length: '.filesize($dlFile));//ファイルサイズを指定することでプログレスバーが表示される。 20 21 //readfile($dlFile); 22 while (ob_get_level() > 0) { 23 ob_end_clean(); 24 } 25 ob_start(); 26 27 // ファイル出力 28 if ($file = fopen($dlFile, 'rb')) { 29 while(!feof($file) and (connection_status() == 0)) { 30 echo fread($file, '4096'); //指定したバイト数ずつ出力 31 ob_flush(); 32 } 33 ob_flush(); 34 fclose($file); 35 } 36 ob_end_clean(); 37 38?>
足りていない情報などありましたら追記いたしますのでお申し付け下さい。
何分初心者ですので、至らない点あるかと思いますがお手柔らかにお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/21 08:01
2019/01/21 08:04
2019/01/21 08:05
2019/01/21 08:45
2019/01/21 09:05