我正在寻找一种方法来出口到csv的飞行,并遇到了这个。
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('path_to_file/file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);这只是取自php.net页面的基本代码。不管怎样,我把它插进去试一试,然后再用它来满足我自己的需要。但我一直收到以下错误。
PHP Warning: fopen(path_to_file): failed to open stream
fputcsv() expects parameter 1 to be resource, boolean given
fclose() expects parameter 1 to be resource, boolean given我不确定为什么fopen()错误会出现,因为我希望它只是动态创建一个新文件,而这正是我认为它所做的事情?
可以安全地假设这是文件权限错误吗?
另外,由于im使用的是php.net页面中的完全相同的代码,所以im假设由于fopen()问题而显示了其他错误。
编辑。
看起来我还是多贴点信息比较好。
所涉及的类。
class transData{
var $connection;
var $date;
var $data;
function __construct($date){
$this->date = $date;
return;
}
function getData(){ //this method just pulls the results of the query and returns them as an array
global $connection;
$date=$this->date;
//get num row for each date/fromfile combo, one with the most should be the most uptodate.
// count(fromfile) for specific date, one with most will be the most up to date, if more than one then take the one with highest appended int
$count=array();
$x=0;
$mysqli_result=$connection->query("select fromfile,count(fromfile) from transdata where soldtime like '%".$date."%' group by fromfile");
while($row=$mysqli_result->fetch_row()){
$count[$row[0]]=$row[1];
}
$mysqli_result->free();
//got the data in array, now rearrange to get one with highest count
arsort($count);
$fromFile=key($count);
$temp=array();
$x=0;
$mysqli_result=$connection->query("select * from transdata where soldtime like '%".$date."%' and fromFile='".$fromFile."' order by soldtime desc");
while($row=$mysqli_result->fetch_row()){
$temp[$x]['id']=$row[0];
$temp[$x]['departure']=$row[1];
$temp[$x]['type']=$row[2];
$temp[$x]['typeText']=$row[3];
$temp[$x]['price']=$row[4];
$temp[$x]['soldTime']=$row[5];
$temp[$x]['dateAdded']=$row[6];
$temp[$x]['fromFile']=$row[7];
$x++;
}
$this->data = $temp;
$mysqli_result->free();
return;
}
function dayTotal($noDays){
//$list=array();
$html="<table class=\"paxdata\">";
$html.="<tr><th>Day</th><th>Date</th><th>No. Sold</th><th>Total Price(£)</th><th></th></tr>";
//$list=array('Day','Date','No. Sold','Total Price(£)');
//build list of dates to work with
$inc=0;
$hours=array();$hours[0]=0;$hours[1]=24;$hours[2]=48;$hours[3]=72;$hours[4]=96;$hours[5]=120;$hours[6]=144;$hours[7]=168;
while($inc!=$noDays){
$date=date('Y/n/j',time() - 60 * 60 * $hours[$inc]); //format for calling class transData()
$formatDate=date('Y-m-d',time() - 60 * 60 * $hours[$inc]); //format for displaying date in table
$day=date('l',time() - 60 * 60 * $hours[$inc]); //text day name
$link=explode('/',$date);
//call to this class to get all the data for us
$getData = new transData($date);
$all = $getData->getData();
$stuff = $getData->data;
$x=0;$price=0;
foreach($stuff as $v){
$price=$price+$v['price'];
$x++;
}
$totalSold=$totalSold+$x;
$totalPrice=$totalPrice+$price;
$checkOdd=new numeric();
$odd=$checkOdd->is_odd($inc);
if($odd==1){$html.="<tr class=\"odd\">";}else{$html.="<tr class=\"even\">";}
$html.="<td width=\"100px\">".$day."</td><td width=\"100px\">".$formatDate."</td><td>".$x."</td><td>".fixedToFloat($price)."</td><td><a href=\"index.php?module=chooseDate&year=$link[0]&month=$link[1]&day=$link[2]\">More info?</a></td></tr>";
//$list=array($day,$formatDate,$x,$price);
$inc++;
}
$html.="<tr><td></td><th>Totals:</th><th>".$totalSold."</th><th>".fixedToFloat($totalPrice)."</th></tr>";
$html.="</table>";
echo $html;
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('~/file.csv', 'w');
if ($fp != false){
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
}
fclose($fp);
}
}通过浏览器由此调用。
$date=date('Y/n/j');
$getData = new transData($date);
$all = $getData->getData();
$getData->dayTotal(7);/var/log/system.log中的响应
PHP Notice: Undefined variable: totalSold in /Users/me/Sites/KF/sales/specificClasses.php on line 218
PHP Notice: Undefined variable: totalPrice in /Users/me/Sites/KF/sales/specificClasses.php on line 219
PHP Warning: fopen(~/Sites/KF/file.csv): failed to open stream: No such file or directory in /Users/me/Sites/KF/sales/specificClasses.php on line 238
PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /Users/me/Sites/KF/sales/specificClasses.php on line 244发布于 2012-05-01 19:28:18
来自fopen的PHP.net文档
返回值
如果成功则返回文件指针资源,如果出错则返回FALSE。
要么是你的代码找不到"path_ to _file/file.csv",要么是你的web服务器(或CLI)没有在那里写的权限。
发布于 2012-05-01 19:33:25
我不知道你的确切设置,但最常见的是权限问题。fopen返回FALSE,如果它不能打开或创建文件,这就是你的“布尔”问题。尝试在"path_to_file“文件夹上设置权限777,然后再次尝试运行脚本
在尝试操作文件之前,还应该检查fopen的返回值,如下所示
$fp = fopen('path_to_file/file.csv', 'w');
if ($fp != false){
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
}https://stackoverflow.com/questions/10396962
复制相似问题