PHP程序将运行并回显任何内容

时间:2011-11-09 16:37:11

标签: php

我创建了一个从.xls文件中读取数据并将其转换为.csv的脚本,然后我有一个脚本,它接受.csv并将其放入一个数组中,然后我有一个带有foreach循环的脚本并且最后应该回显结束变量,但它没有回声,只是一个空白页面。该文件写得很好,这是肯定的,但我不知道脚本是否读取了csv,因为如果我在读取后放入一个echo,它只会返回空白。

这是我的代码:

    <?php
ini_set('memory_limit', '300M');
$username = 'test';

function convert($in) {

        require_once 'Excel/reader.php';
    $excel = new Spreadsheet_Excel_Reader();
    $excel->setOutputEncoding('CP1251');
    $excel->read($in);
    $x=1;
    $sep = ",";
    ob_start();
    while($x<=$excel->sheets[0]['numRows']) {
     $y=1;
     $row="";
     while($y<=$excel->sheets[0]['numCols']) {
         $cell = isset($excel->sheets[0]['cells'][$x][$y]) ? $excel->sheets[0]['cells'][$x][$y] : '';
         $row.=($row=="")?"\"".$cell."\"":"".$sep."\"".$cell."\"";
         $y++;
     } 
     echo $row."\n"; 
     $x++;
    }

   return ob_get_contents();
    ob_end_clean();

}

$csv = convert('usage.xls');

$file = $username . '.csv';
$fh = fopen($file, 'w') or die("Can't open the file");
$stringData = $csv;
fwrite($fh, $stringData);
fclose($fh);

  $maxlinelength = 1000;
$fh = fopen($file);
$firstline = fgetcsv($fh, $maxlinelength);
$cols = count($firstline);

$row = 0;
$inventory = array();
while (($nextline = fgetcsv($fh, $maxlinelength)) !== FALSE )
{
for ( $i = 0; $i < $cols; ++$i )
{
$inventory[$firstline[$i]][$row] = $nextline[$i];
}
++$row;
}
fclose($fh);


$arr = $inventory['Category'];

$texts = 0;
$num2 = 0;
foreach($inventory['Category'] as $key => $value) {
$val = $value;
if (is_object($value)) { echo 'true'; }
        if ($value == 'Messages ') { 
     $texts++; 
     }

}
echo 'You have used ' . $texts . ' text messages';

?>

2 个答案:

答案 0 :(得分:2)

一旦你回来了。你不能在函数中做任何其他事情:

 return ob_get_contents();
 ob_end_clean();//THIS NEVER HAPPENS

因此ob永远不会刷新,也不会有任何输出。

答案 1 :(得分:0)

我看到那里有很多重复无用的操作。为什么不简单地使用从Excel文件中提取的数据构建数组?然后,您可以使用fputcsv()写出该数组,而不是自己构建CSV字符串。

然后将csv写入文件,然后读回文件并将其处理回数组。这引出了一个问题......为什么?在您从excel文件中读取的那一刻,您已经获得了原始的单个数据位,那么为什么所有这些花哨的礼物包装只会将它们全部分开?