1.不要使用 相对路径
它首先查找指定的php包含路径,然后查找当前目录,因此会检查过多路径。如果该脚本被另一目录的脚本包含,它的基本目录变成了另一脚本所在的目录。
另一问题,当定时任务运行该脚本,它的上级目录可能就不是工作目录了。因此最佳选择是使用绝对路径。
我们定义了一个绝对路径,值被写死了。我们还可以改进它,路径 /var/www/project 也可能会改变,那么我们每次都要改变它吗?不是的,我们可以使用__FILE__常量。
现在,无论你移到哪个目录,如移到一个外网的服务器上,代码无须更改便可正确运行。
2. 不要直接使用 require, include
可以在脚本头部引入多个文件、像 类库 、工具文件和助手函数等。
这种用法相当原始,应该更灵活点,应编写个助手函数包含文件。
有什么不一样吗?该代码更具可读性,將来你可以按需扩展该函数。
还可做得更多:为同样文件查找多个目录。能很容易的改变放置类文件的目录,无须在代码各处一一修改。可使用类似的函数加载文件,如html内容。
除此之外, 开发中经常会碰到导出MySQL数据到Excel文件的需求。一些开源的类库,如PHPExcel,确实比较容易实现,但由于对大量数据的兼容很不好,很容易到达PHP内存使用上限。
3.广州中星小编整理了一下fput csv 写CSV文件的方式,具体实现代码如下
//声明文件头,文件名news.csv,需自行修改
header (‘Content-Type: application/vnd.ms-excel’);
header(‘Content-Disposition: attachment;filename=”news.csv”‘);
header(‘ Cache-Control : max-age=0′);
//打开 文件句柄 ,并输出至浏览器
$ fp = fopen(‘php://output’, ‘a’);
//定义并输出Excel列名
$t = array(‘编号’, ‘标题’);
foreach ($t as $_k => $_v) {
//转码,CSV的Excel支持 gbk 编码
$t[$_k] = iconv (‘utf-8’, ‘gbk’, $_v);
}
fputcsv($fp, $t);
//操作数据库,读取数据
$ condition = ‘1’;
$result = $db->query(“SELECT * FROM e_article WHERE {$condition}”);
//初始化计数器
$i = 0;
//定义刷新输出缓冲频率行数
$limit = 100000;
while($r = $db->fetch_array($result)) {
$i++;
if($i < $limit){
//刷新输出buffer
ob_flush();
flush();
$i = 0;
}
//转码
foreach ($r as $k => $v) {
$r[$k] = iconv(‘utf-8’, ‘gbk’, $v);
}
fputcsv($fp, $r);
}
$db->free_result($result);