私はob_start()
/ob_flush()
を使用して、長いインポート操作中にある程度の進歩が見られることを願っています。
これが私がしていることの簡単な概要です:
<?php
ob_start ();
echo "Connecting to download Inventory file.<br>";
$conn = ftp_connect($ftp_site) or die("Could not connect");
echo "Logging into site download Inventory file.<br>";
ftp_login($conn,$ftp_username,$ftp_password) or die("Bad login credentials for ". $ftp_site);
echo "Changing directory on download Inventory file.<br>";
ftp_chdir($conn,"INV") or die("could not change directory to INV");
// connection, local, remote, type, resume
$localname = "INV"."_".date("m")."_".date('d').".csv";
echo "Downloading Inventory file to:".$localname."<br>";
ob_flush();
flush();
sleep(5);
if (ftp_get($conn,$localname,"INV.csv",FTP_ASCII))
{
echo "New Inventory File Downloaded<br>";
$datapath = $localname;
ftp_close($conn);
} else {
ftp_close($conn);
die("There was a problem downloading the Inventory file.");
}
ob_flush();
flush();
sleep(5);
$csvfile = fopen($datapath, "r"); // open csv file
$x = 1;
// skip the header line
$line = fgetcsv($csvfile);
$y = (feof($csvfile) ? 2 : 5);
while ((!$debug) ? (!feof($csvfile)) : $x <= $y) {
$x++;
$line = fgetcsv($csvfile);
// do a lot of import stuff here with $line
ob_flush();
flush();
sleep(1);
}
fclose($csvfile); // important: close the file
ob_end_clean();
ただし、画面には何も出力されていません。
データファイルが配置されているディレクトリを監視しているので、データファイルがダウンロードされていることがわかります。
また、インポートが行われていることもわかっています。つまり、DBを監視でき、レコードが挿入されているため、whileループになっています。
画面に出力されない理由について何か考えはありますか?
PHP設定も確認する必要があります
一部のインストールはデフォルトで4096になり、一部はデフォルトでオフになります
output_buffering =オフ
output_buffering = 4096
ジョージに同意しましたが、上記の設定を確認してください
出力バッファリングが自動的に開始されないことを確認してください。実行:
print ob_get_level ();
ob_start();の前何か他のものが表示される場合は、0が答えです。
ねえ男私もこの問題で立ち往生し、最終的にここで正しい解決策を得ましたそれはあなたのためです
ページにコンテンツタイプを追加する必要があります。これは2つの方法で行うことができます。1。htmlタグを使用する
_<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
_
例.
_<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Wp Migration</title>
</head>
<body>
<?php
for($i=0;$i<70;$i++)
{
echo 'printing...<br>';
ob_flush();
flush();
sleep(3);
}
?>
</body>
</html>
_
phpヘッダー関数を使用する
<?php header( 'Content-type: text/html; charset=utf-8' ); ?>
例.
_<?php
header( 'Content-type: text/html; charset=utf-8' );
for($i=0;$i<70;$i++)
{
echo 'printing...<br>';
ob_flush();
flush();
sleep(3);
}
?>
_
ではごきげんよう
Ob_end_clean()は、現在の出力バッファーの内容を破棄し、バッファーをオフにします。代わりにob_end_flush()を使用する必要があります。
この行を追加します
header("X-Accel-Buffering: no");
私のために働いた。