3

fputcsvを使用したcsvファイルの書き込みに問題があります。ページのhtmlもcsvファイルに入れます。私のコードの何が問題になっていますか?

//Excel header
header("Content-Disposition: attachment; filename=\"Delivery_Reports.csv\";" );
header("Content-type: application/vnd.ms-excel");
$out = fopen("php://output", 'w');
$flag = false;
// $result = mysql_query("SELECT * FROM senderids ") or die('Query failed!');
//$sel="SELECT number as MobileNumber ,snum as Sender , msg as Subject ,crdate as Date ,status FROM savemsg WHERE userID='".$_SESSION['id']."' ".$str." ORDER BY sn DESC ";
$result = mysql_query("SELECT `count`, `dnd`, `credit`, `sender_id`, `to`, `message`, `status` FROM `reports` WHERE `unq_id` = '$dlr_id'");
while(false !== ($row = mysql_fetch_assoc($result))){
    if(!$flag){
        $list = array(
            "Total"=>"Total",
            "DND"=>"DND",
            "Credits"=>"Credits",
            "From"=>"From",
            "To"=>"To",
            "Message"=>"Message",
            "Status"=>"Status"
        );
        // display field/column names as first row
        fputcsv($out, array_keys($list), ',', '"');
        $flag = true;
    }
    // array_walk($row, 'cleanData');
    fputcsv($out, array_values($row), ',', '"');
}
fclose($out);
4

4 に答える 4

7

コードスニペット内から、他に何も出力されないことを保証することはできません。このスニペットの前のコードが出力バッファリングを使用している場合は、ob_end_cleanを使用してHTMLを破棄できます。このスニペットの後のコードが問題の原因である場合は、単にdieを呼び出して、実行されないようにすることができます。ただし、このスニペットの前のコードがHTMLをブラウザに直接出力している場合、またはHTMLを出力して絶対に実行する必要がある場合は、問題を解決するためにそのコードを変更する必要があります。

ティムが述べたように、印刷エコー、および疑似ファイル への出力php://outputはまったく同じことを行います。

于 2012-08-16T22:27:22.623 に答える
0

continueファイルを閉じる直前にキーワードを使用することもできます( fclose($f);)。これも素敵に動作します。

于 2014-07-24T07:45:13.640 に答える
0

また、出力が私のhtmlをスクレイピングするのを止めたexit;後に使用することもできます。fclose($out);

于 2019-11-25T22:14:49.827 に答える
0

古い質問だとは思いますが、Googleで見つかるので、これを追加します。

ファイルを作成する前に、WordPressなどのCMSによってHTMLが出力されている場合は、ヘッダーを出力する前に追加するob_clean();と役立つ場合があります。ob_start();

例えば:

function create_csv($records, $columns){
    ob_clean();
    ob_start();
    header('Content-Type: application/csv');
    header('Content-Disposition: attachment; filename="Export.csv"');
    $fp = fopen('php://output', 'w+');
    // Generate the file content.
    fclose($fp);
    die();
}
于 2019-12-05T11:39:28.187 に答える