私が現在閲覧している Web ページの最初のプログラマーが残したコードに行き詰まりました。彼は独自のカスタム フレームワークを作成します。
私の問題は、ファイル エクスポート用の関数を作成したことです。クエリをテキスト ファイルにエクスポートする機能があるため、クライアント/ユーザーは、生成されたファイルをブラウザーに強制的にダウンロードさせることで自動的にダウンロードされます。私の強制ダウンロードのコードは次のとおりです。
注:他のフォーラムや Stackoverflow で既に検索しましたが、答えが見つかりません。これは私の現在のコードです:
if(!defined('APPLICATION_RUNNING')){
header("HTTP/1.0 404 Not Found");
die('acces denied');
}
if(defined('ANNOUNCE')){
echo "\n<!-- loaded: ".__FILE__." -->\n";
}
if(!class_exists('APP_Ajax')){
class APP_Ajax extends APP_Base_Ajax
{
function textfiles()
{
global $apptemplate, $appform, $appdb;
if(!$appform->form_valid($this->post['formid'])) // if not b\valid form
{
json_return_error(5);
}
else
{
if(!empty($this->post['form'])) //if the post of form is not empty
{
$e = array();
}
else
{
json_return_error(6);//alert if form is empty
}
if(empty($this->post['form']['rowid']))
{
json_return_error(252); // if rowid is empty then raise error
}
else
{
$rets = $this->post['form']['rowid'];
$ids = explode(',',$rets);
foreach ($ids as $kids)
{
$sql = pg_query("SELECT * from tbl_patient WHERE id='$kids'");
$info = pg_fetch_assoc($sql);
$text[] = ucwords($info['firstname']." ".$info['mi']." ".$info['lastname']).",".$info['medicalrecordnumber'].",".$info['referraldate'];
}
$output = implode( "\r\n" , $text );
$randfile = rand(12345689,999999999)."_".date('m-d-Y');
$f = fopen("templates/default/exports/".$randfile.".txt", "w");
fwrite($f, $output);
fclose($f);
$file_name = ABS_PATH.'templates/default/exports/'.$randfile.'.txt';
header('Pragma: public'); // required
header('Expires: 0');// no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_name)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file_name));
header('Connection: close');
readfile($file_name);// push it out
}
}
}
}
上記のコードはエラーを生成しません。ファイルは私が作成したパスに作成されましたが、問題は「名前を付けて保存しない」など、ブラウザがファイルをダウンロードしないことです。httpfox を使用してヘッダーなどを表示すると、クエリの結果が httpfox コンテンツ タブに表示されるため、ブラウザーにダウンロード ファイル ([名前を付けて保存] ダイアログ) を表示させたいことを除いて、コードに問題はありません。そこに保存できます ハードドライブ..
注 2#:のようなダウンロード リンクを作成すると、ダウンロード リンクDownload
をクリックすると、ページがメイン ページに戻り、ダウンロードがまったく行われません。
この作業を行う方法について、スクリプトまたはアドバイスをください。前もって感謝します。ここで何か不足している場合は教えてください。
おっと、言い忘れていましたが、私がアクセスしている Web サイトでは、セキュリティのためにファイルへの外部アクセスが許可されていません。そのため、エクスポート ファイルを他のページにリンクしてダウンロードすることはできません。:)