4

有人可以告诉我我做错了什么吗?我有一个 php 脚本,它应该使用 cron 作业执行,从数据库中提取数据并将其放入 csv 文件中。当我从浏览器运行它时,它工作得很好,所以我确定我的查询是正确的。但是,当我使用 cron 作业时,它返回“未指定输入文件。 ”并且不写入文件。

这是我的代码:

克朗:

/home/ACCOUNT_NAME/public_html/directory/report.sh

报告.sh

php -q /home/ACCOUNT_NAME/public_html/directory/report.php
php -q /home/ACCOUNT_NAME/public_html/directory/report_mail.php

报告.php

<?php

    $con = mysql_connect("localhost", "my_un", "my_pw") ;

    if(!$con){
        die('Could not connect: ' . mysql_error()) ;
        }
    mysql_select_db("my_db", $con) ;

if (!function_exists('fputcsv')){
        function fputcsv($objFile,$arrData,$strDelimiter=',',$strEnclose='"') {
            $strNewLine="\n";
            $strToWrite = '';
            foreach ($arrData as $strCell){
                //Test if numeric
                if (!is_numeric($strCell)){
                    //Escape the enclose
                    $strCell = str_replace($strEnclose,$strEnclose.$strEnclose,$strCell);
                    //Not numeric enclose
                    $strCell = $strEnclose . $strCell . $strEnclose;
                }
                if ($strToWrite==''){
                    $strToWrite = $strCell;
                } else {
                    $strToWrite.=  $strDelimiter . $strCell;
                }
            }
            $strToWrite.=$strNewLine;
            fwrite($objFile,$strToWrite);
        }
}

// CUT - MY QUERY HERE


$fp = fopen("/reports/report.csv" , "w+");

foreach ($list as $line) {
    fputcsv($fp, split(',', $line));
}
?>

csv 文件应存储在

/home/ACCOUNT_NAME/public_html/directory/reports/report.csv

我在这里想念什么?TIA

4

4 回答 4

3

您没有保存到正确的目录。而是做

$fp = fopen(__DIR__ . "/reports/report.csv" , "w+");
于 2013-02-01T22:30:27.967 回答
3

问题是,当您以 开始fopen()参数时/,您将转到服务器根目录,而不是 Web 根目录。因此,您要么需要提供fopen()文件的完整路径,要么像这样动态检索当前目录:

$this_directory = dirname( __FILE__ );
$fp = fopen($this_directory . "/reports/report.csv" , "w+");
于 2013-02-01T22:34:38.253 回答
1
$fp = fopen("/reports/report.csv" , "w+");

这不会写入您期望文件去的地方。它将尝试reports在文件系统根目录下创建它。

于 2013-02-01T22:31:01.723 回答
0

这个答案可能离题,但 MySQL 能够使用“INTO OUTFILE”直接将查询结果输出到 CSV 文件。

注意MySQL 应该与所需的输出文件位置在同一台服务器上运行

请参见此处的示例: MySQL 导出到 outfile : CSV escaping chars

于 2013-02-01T23:19:10.493 回答