fputcsv和fwrite无法正常工作

时间:2013-07-03 12:12:02

标签: mysql file fputcsv

我已按照here给出的解释将查询结果写入文件。 但在这种情况下,我必须先打开并编写文件头。然后继续逐个编写/追加查询结果以进行多次查询。这个附加部分我作为一个函数编写。我的脚本只用头文件(从第一部分)编写文件的问题,它不遵循函数调用时出现的fputcsv命令。你能帮我解决这个问题。

这是我首先打开文件的代码:

<?php
$fp = fopen('php://output', 'w');
$headers = array("Index","Gene_symbol","Gene_Name","Human_entrez","Rat_entrez","Mouse_entrez","DbTF","PMID");
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.txt"');
fputcsv($fp, $headers,chr(9));
header('Pragma: no-cache');
header('Expires: 0');
?>

然后查询部分有点像这样(我有多个这样的查询部分,每个部分调用相同的函数):

<?php
if (is_numeric($sterm))
    {
        $query="select * from tf where entrez_id_human=$sterm || entrez_id_rat=$sterm || entrez_id_mouse=$sterm";
        $result=mysql_query($query) or die(mysql_error());
        if (mysql_num_rows($result)==0)
          {echo "<tr><td align='center' colspan=6> $sterm not found!  </td> </tr>";}
         elseif (mysql_num_rows($result)>0)
         {result_disp($result);}
    }
?>

然后通过函数将结果写入文件:

<?php
function result_disp($results)
{
if($fp && $results)
{
 while ($rows = mysql_fetch_row($results))
    {
        fputcsv($fp, array_values($rows),chr(9));
    } die;
 }
}

最后在脚本结束时关闭文件

fclose($fp);
?>

谢谢

1 个答案:

答案 0 :(得分:0)

您的第一个问题是您的文件句柄在该函数中没有范围。我认为最好的方法是将其传递给函数:

....
     elseif (mysql_num_rows($result)>0)
     {result_disp($result, $fp);}
....

function result_disp($results, $fp)
{
if($fp && $results)
{
 while ($rows = mysql_fetch_row($results))
    {
        fputcsv($fp, array_values($rows),chr(9));
    } //DO NOT PUT "die()" HERE
 }
}

你的第二个问题是函数内的“die()”语句。 “die()”的目的是完全停止脚本。这是PHP自杀。因此,如果您将其保留,则在第一次调用result_disp时,您的脚本将暂停。这意味着你不仅永远不会达到fclose($ fp),你永远不会达到对result_disp的任何其他调用。

你的第三个问题是你正在使用mysql_ *函数。由于多种原因,这些已被弃用(不再使用)。我对由它引起的数据库连接冻结有个人经验。您应该切换到mysqliPDO