0

PHPを使用していて、2つの関数を次々に実行したいと考えています。

これらの関数はgetallmydata()とcreateCSV()です。

以下のコードは最初の関数を正常に実行しますが、2番目の関数createCSV()は機能していません。正しく呼び出されていないようです。

両方の関数が独立して正しく機能するため、コードの構造に何か問題がありますか?私はこれを解決することはできません!

<?php

//run this function//
getallmydata();
//then run this function//
createCSV();


function getallmydata(){ 

require_once dirname(__FILE__).'/cm/csrest_general.php';
require_once dirname(__FILE__).'/cm/csrest_clients.php';
require_once dirname(__FILE__).'/cm/csrest_campaigns.php';

$api_key = 'MY API KEY';
$wrap = new CS_REST_General($api_key);
$result = $wrap->get_clients();
$Content = "";

if ($result->was_successful()) {



foreach ($result->response as $client) {

    $client_wrapper = new CS_REST_Clients($client->ClientID, $api_key);
    $client_details_result = $client_wrapper->get();
    $campaigns_result = $client_wrapper->get_campaigns();

    if ($client_details_result->was_successful()) {
        /* This is where the client details will be */
        $client_details = $client_details_result->response;

        echo ('<pre>');
        /*print out the company name*/
        echo "Company Name = " . $client_details->BasicDetails->CompanyName . "<br/>";
        /*print out the company markup*/
        echo "Markup On Delivery = " . $client_details->BillingDetails->MarkupOnDelivery . "<br/>";

        $count = 0;

            if ($campaigns_result->was_successful()) {

                /*print out the latest campaign name of the current campaign*/
                foreach ($campaigns_result->response as $campaign_ob) {

                    echo 'Latest Campaign Name = ' . $campaign_ob->Name . '<br/>';
                    //echo 'Latest Subject = ' . $campaign_ob->Subject . '<br/>';
                    //echo 'Total Recipients = ' . $campaign_ob->TotalRecipients . '<br/>';
                    //echo 'Sent Date = ' . $campaign_ob->SentDate . '<br/>';

                    /*Set content for CSV File*/

                    //$Content .= "This is within the loop \n";



                    $count++;

                    if($count > 0) break;

                }/*end loop*/

            }/*end campaigns if statement*/

        echo ('</pre>');




    } else {
        echo 'Failed with code '.$client_details_result->http_status_code."\n<br /><pre>";
        var_dump($client_details_result->response);
    }

}

} else {
echo 'Failed with code '.$result->http_status_code."\n<br /><pre>";
var_dump($result->response);
echo ('</pre>');
} 


} //end main function




/*create the downloadable csv file*/

function createCSV(){


$FileName = date("d-m-y") . '.csv';


# Titlte of the CSV
//$Content = "Company_Name Markup Campaign_Name Subject Recipients Date \n";

# fill data in the CSV
//$Content .= "\"John Doe\",\"New York, USA\",15,65465464 \n";
$Content .= "Testing The Function Works OK \n";
//$Content .= "This should be another line";
header('Content-Type: application/csv'); 
header("Content-length: " . filesize($NewFile)); 
header('Content-Disposition: attachment; filename="' . $FileName . '"'); 
echo $Content;
exit();  

}//end csv download function







/*end create downloadable .csv file */





?>
4

2 に答える 2

0

エラーが発生するはずです: headers already sent。(2 番目の関数が正しく呼び出されていることを確認しましたか? 関数echoの最初の行に a を配置すると、それを見つけることができます。)

CSV ページを作成しようとしていますが、最初の関数で HTML を解析しているため、通常の HTML ページであるというヘッダーが既にクライアントに送信されています。最初の関数でこれらのエコーを削除すると、機能するはずです。

PHPマニュアルの引用:

実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から header() を呼び出す必要があることに注意してください。include 関数、require 関数、または別のファイル アクセス関数を含むコードを読み取り、header() が呼び出される前に出力されるスペースまたは空の行があることは、非常に一般的なエラーです。単一の PHP/HTML ファイルを使用する場合にも、同じ問題が存在します。

ヘッダーの詳細: PHP ヘッダー

于 2012-07-19T10:52:56.140 に答える
-1

最初に私があなたに言うと思うのは、最初に関数定義を記述し、次に関数を呼び出す必要があるということです。

function getallmydata(){
 // function code
}

function createCSV(){
   // function code
}

getallmydata();
createCSV();

2. 2番目のことは、コードの外側のphpコードまたは応答として送信されるo/pに空白が残っているかどうかを確認することですheader().関数は失敗します。このことを試して、もう一度確認してください。header()header()

于 2012-07-19T10:53:10.957 に答える