0

我正在使用 PHP 并想一个接一个地运行 2 个函数。

这些函数是 getallmydata() 和 createCSV()

下面的代码可以正常运行第一个函数,但第二个函数 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. (你检查了第二个函数是否被调用?你可以通过echo在函数的第一行放置一个来找到它。)

您正在尝试创建一个 CSV 页面,但您在第一个函数中解析 HTML,因此标头已经发送到客户端,说明它是一个普通的 HTML 页面。在第一个函数中删除这些回声,它应该可以工作。

PHP手册的引用:

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。使用 include 或 require 函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。使用单个 PHP/HTML 文件时也存在同样的问题。

有关标头的更多信息:PHP 标头

于 2012-07-19T10:52:56.140 回答
-1

首先我想我会告诉你 1 你应该先写函数定义然后你应该调用一个函数,即

function getallmydata(){
 // function code
}

function createCSV(){
   // function code
}

getallmydata();
createCSV();

2. 第二件事是检查php代码之外的代码中是否有任何空白或任何作为resonse发送的o / p,因为当您使用该用户时,如果除了作为响应发送header()之外的任何类型的内容然后功能失败。试试这个东西,然后再检查一次。header()header()

于 2012-07-19T10:53:10.957 回答