我正在为客户机使用一个插件(我对其进行了一定程度的修改),该插件创建并维护一个组织成员数据库(使用一个新的wp表)。
有一个很好的功能可以进行csv导入和插入,效果很好。还有一个功能可以将此表的内容下载为csv,该功能在我的本地系统上运行良好,但在服务器上运行时失败。坦率地说,我不知道为什么。
包含逻辑的php文件仅链接到。文件:
<?php
//include some files
include(\'../../../wp-blog-header.php\');
//DIAG: phpinfo();
function fputcsv4($fh, $arr) {
$csv = "";
while (list($key, $val) = each($arr)) {
$val = str_replace(\'"\', \'""\', $val);
$csv .= \'"\'.$val.\'",\';
}
$csv = substr($csv, 0, -1);
$csv .= "\\n";
if (!@fwrite($fh, $csv))
return FALSE;
}
//get member info and column data
$table_name = $wpdb->prefix . "member_db";
$year = date (\'Y\');
$members = $wpdb->get_results("SELECT * FROM ".$table_name, ARRAY_A);
$columns = $wpdb->get_results("SHOW COLUMNS FROM ".$table_name, ARRAY_A);
//DIAG: echo \'SQL: \'.$sql.\', RESULT: \'.$result.\'<br>\';
//output headers
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\\"members.csv\\"");
//open output stream
$output = fopen("php://output",\'w\');
//output column headings
$data[0] = "ID";
$i = 1;
foreach ($columns as $column){
//DIAG: echo \'<pre>\'; print_r($column); echo \'</pre>\';
$field_name = \'\';
$words = explode("_", $column[\'Field\']);
foreach ($words as $word) $field_name .= $word.\' \';
if ( $column[\'Field\'] != \'id\' && $column[\'Field\'] != \'date_updated\' ) {
$data[$i] = ucwords($field_name);
$i++;
}
}
$data[$i] = "Date Updated";
fputcsv4($output, $data);
//output data
foreach ($members as $member){
//DIAG: echo \'<pre>\'; print_r($member); echo \'</pre>\';
$data[0] = $member[\'id\'];
$i = 1;
foreach ($columns as $column){
//DIAG: echo \'<pre>\'; print_r($column); echo \'</pre>\';
if ( $column[\'Field\'] != \'id\' && $column[\'Field\'] != \'date_updated\' ) {
$data[$i] = $member[$column[\'Field\']];
$i++;
}
}
$data[$i] = $member[\'date_updated\'];
//echo \'<pre>\'; print_r($data); echo \'</pre>\';
fputcsv4($output, $data);
}
fclose($output);
?>
因此,我们有一个例程,其中运行一个查询,
$output
与建立
fopen
, 添加到via foreach语句中
fclose
D
我(从服务器)得到的错误是
Error 6 (net::ERR_FILE_NOT_FOUND): The file or directory could not be found.
但它显然正在被发现,只是失败了。如果我启用
phpinfo()
(PHP版本5.2.17)在文件的顶部,我肯定会得到一个响应,尤其是
Cannot modify header information
(因为
phpinfo()
已生成标头)。然而,所有预期的数据都会打印到页面上,因此至少有很多数据工作正常。
我猜是有什么东西阻止了fopen、fclose函数正常工作,但我没有足够的经验来确定到底是什么问题。
我将再次注意到,这与我的测试环境(localhost/XAMPP、netbeans)中的预期完全一样。
任何想法都将不胜感激。