4

誰かが私が間違っていることを教えてもらえますか? cron ジョブで実行されるはずの php スクリプトがあり、データベースからデータを抽出して csv ファイルに入れます。ブラウザから実行すると問題なく動作するので、クエリが正しいと確信しています。しかし、cronジョブを使用すると、「入力ファイルが指定されていません。」が返され、ファイルに書き込まれません。

これが私のコードです:

クロン:

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

report.sh

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

report.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

ここで何が欠けていますか?ティア

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 export into outfile : CSV escaping chars

于 2013-02-01T23:19:10.493 に答える