0

重複の可能性:
PHPによってすでに送信されているヘッダー

mysqlテーブルを.CSVファイルに変換しているPHPスクリプトは、ヘッダー情報を変更できない、CSVファイルにデータを書き込まないなどのエラーを出します。

エラーは次のとおりです。

警告:ヘッダー情報を変更できません-30行目の/home/public_html/amgtst/export-tst.phpの(/home/public_html/amgtst/export-tst.php:3で開始された出力)によって既に送信されたヘッダー

警告:ヘッダー情報を変更できません-31行目の/home/public_html/amgtst/export-tst.phpの(/home/public_html/amgtst/export-tst.php:3で開始された出力)によって既に送信されたヘッダー

警告:ヘッダー情報を変更できません-32行目の/home/public_html/amgtst/export-tst.phpの(/home/public_html/amgtst/export-tst.php:3で開始された出力)によって既に送信されたヘッダー

警告:ヘッダー情報を変更できません-33行目の/home/public_html/amgtst/export-tst.phpの(/home/public_html/amgtst/export-tst.php:3で開始された出力)によって既に送信されたヘッダー

Area Area DC_No Area DC_No Product_type Area DC_No Product_type DC_date Area DC_No Product_type DC_date Ac_code Area DC_No Product_type DC_date Ac_code PO_No Area DC_No Product_type DC_date Ac_code PO_No PO_date Area DC_No Product_type DC_date Ac_code PO_No PO_date Inv_No Area DC_No Product_type DC_date Ac_code PO_No PO_date Inv_No CNo_Qty Area DC_No Product_type DC_date Ac_code PO_No PO_date Inv_No CNo_Qty Deleted Area DC_No Product_type DC_date Ac_code PO_No PO_date Inv_No CNo_Qty Deleted Vehicle_no Area DC_No Product_type DC_date Ac_code PO_No PO_date Inv_No CNo_Qty Deleted Vehicle_no "Jayanagar" "100" "Gas" "2012-11-30" "2" "2012-11-30" "11" "KA123-333" "Jayanagar" "104" "Gas" "2012-12-03" "3" "2012-12-03" "14" "Jayanagar" "101" "Gas" "2012-12-03" "3" "2012-12-03" "13" "Jayanagar" "105" "Gas" "2012-12-03" "3" "2012-12-03" "17" "Jayanagar" "106" "Gas" "2012-12-03" "3" "2012-12-03" "16" "Jayanagar" "107" "Gas" "2012-12-03" "3" "2012-12-03" "KA576" "Jayanagar" "108" "Gas" "2012-12-03" "2" "2012-12-03" "25" "KA01P213" "Jayanagar" "111" "Gas" "2012-12-04" "2" "2012-12-04" "27" "Jayanagar" "125" "Gas" "2012-12-04" "3" "2012-12-04" "12" "Jayanagar" "116" "Gas" "2012-12-06" "2" "2012-12-06" "Jayanagar" "117" "Gas" "2012-12-06" "2" "2012-12-06" "19" "Jayanagar" "118" "Gas" "2012-12-06" "2" "2012-12-06" "20" "Jayanagar" "119" "Gas" "2012-12-06" "2" "2012-12-06" "21" "Jayanagar" "130" "Gas" "2012-12-06" "3" "2012-12-06" "22" "KA-01-A4564" "Jayanagar" "131" "Gas" "2012-12-08" "2" "2012-12-08" "23" "KA01-23212" "Jayanagar" "132" "Gas" "2012-12-08" "2" "PIA-234234-ERES" "2012-12-08" "24" "KA-10-23232" "Jayanagar" "133" "Gas" "2012-12-08" "2" "verbal" "2012-12-08" "26" "ka91901212" 

私のphpスクリプト:

    <?php
    include 'dbconnect.php';

    echo "Exporting file - process"."<br><br>";


        header("Content-type: application/csv");
        header("Content-Disposition: attachment; filename=download.csv");
        header("Pragma: no-cache");
        header("Expires: 0");



    $query = "SELECT * FROM DCHDR";

    $export = mysql_query ($query ) or die ( "Sql error : " . mysql_error( ) );

    $fields = mysql_num_fields ( $export );

    for ( $i = 0; $i < $fields; $i++ )
    {
        $header .= mysql_field_name( $export , $i ) . "\t";
        
        echo $header;
    }

    while( $row = mysql_fetch_row( $export ) )
    {
        $line = '';
        foreach( $row as $value )
        {                                            
            if ( ( !isset( $value ) ) || ( $value == "" ) )
            {
                $value = "\t";
            }
            else
            {
                $value = str_replace( '"' , '""' , $value );
                $value = '"' . $value . '"' . "\t";
            }
            $line .= $value;
        }
        $data .= trim( $line ) . "\n";
    }
    $data = str_replace( "\r" , "" , $data );

    if ( $data == "" )
    {
        $data = "\n(0) Records Found!\n";                        
    }

    print "$header\n$data";

    exit();

    php?>
4

5 に答える 5

1

この行で

echo "Exporting file - process"."<br><br>";

いくつかの出力を行い、数行後にいくつかのheader()呼び出しを試みます。

PHPドキュメントからの引用:

通常のHTMLタグ、ファイル内の空白行、またはPHPから実際の出力を送信する前に、header()を呼び出す必要があることに注意してください。

したがって、作成する前に、ヘッダー呼び出しを実行してから、クライアントに出力を送信してください(echoまたは同様のもの)。

それとは別に、ネイティブfputcsv()を使用してCSVファイルを作成できます。tmpfile()出力をクライアントに送信する場合は、と組み合わせて使用​​することもできます。

于 2012-12-12T11:43:34.643 に答える
0

ob_start();を使用します。ファイルの先頭で機能し、最後のエコーを期待してすべてのエコーを削除します

于 2012-12-12T11:41:55.153 に答える
0

削除する

echo "Exporting file - process"."<br><br>";
于 2012-12-12T11:42:18.877 に答える
0

編集:この質問をチェックしてください)

を使用する必要がありob_start();ますob_end_flush()。ブラウザに何かが送信された後、ヘッダーを設定しようとしているように見えます。

これを試して:

<?php

ob_start();

include 'dbconnect.php';

echo "Exporting file - process"."<br><br>";


    header("Content-type: application/csv");
    header("Content-Disposition: attachment; filename=download.csv");
    header("Pragma: no-cache");
    header("Expires: 0");



$query = "SELECT * FROM DCHDR";

$export = mysql_query ($query ) or die ( "Sql error : " . mysql_error( ) );

$fields = mysql_num_fields ( $export );

for ( $i = 0; $i < $fields; $i++ )
{
    $header .= mysql_field_name( $export , $i ) . "\t";

    echo $header;
}

while( $row = mysql_fetch_row( $export ) )
{
    $line = '';
    foreach( $row as $value )
    {                                            
        if ( ( !isset( $value ) ) || ( $value == "" ) )
        {
            $value = "\t";
        }
        else
        {
            $value = str_replace( '"' , '""' , $value );
            $value = '"' . $value . '"' . "\t";
        }
        $line .= $value;
    }
    $data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );

if ( $data == "" )
{
    $data = "\n(0) Records Found!\n";                        
}

print "$header\n$data";

ob_end_flush();

exit();

php?>

また、phpに組み込まれているCSV関数fputcsvを使用することもできます。

于 2012-12-12T11:42:58.840 に答える
0

ヘッダー情報の前にデータを送信することはできないため、

echo "Exporting file - process"."<br><br>";

削除する必要があります。

于 2012-12-12T11:43:20.380 に答える