0

私が行った答えは以下です!

だから私はウェブ経由で完全に機能するPHPスクリプトを持っています。Webホスティングを実行しているサーバーでスケジュールされたタスクに設定したいと思います。Windows 2008 R2 サーバーです。出力ファイルが作成されないという事実を除けば、問題なく動作しているようです。フルパス名が必要ですか? Ex C:\logs.... または以下で動作しますか? スクリプトを Web とコマンド ラインの両方で動作させたいと考えています。

$File3 = "" . $log_dir . "/" . date('m-d-Y') . ".txt"; 
$Handle3 = fopen($File3, 'a+');

$Data3 = "blah";
fwrite($Handle3, $Data3);

より詳しい情報:

ログファイルからのエラーは次のとおりです。

fwrite() は、パラメーター 1 がリソースであると想定し、ブール値は C:\Websites\wordpress\win\import.php 行 686 で指定されます

PHP 警告: file_get_contents(bins/bins-10-09-2013.txt): ストリームを開くことができませんでした: 692 行目の C:\Websites\wordpress\win\import.php にそのようなファイルまたはディレクトリはありません

PHP 警告: fwrite() は、パラメーター 1 がリソースであると想定し、ブール値は C:\Websites\wordpress\win\import.php 行 699 で指定されます

PHP の警告: fclose() は、パラメーター 1 がリソースであると想定し、ブール値は C:\Websites\wordpress\win\import.php 行 709 で指定されます

働く!!まあ、これは私が行ったものであり、うまく機能しているようです。

$File = "" . $uploads_dir . "/import-" . date('m-d-Y-g-ia') . ".txt";
$Handle = fopen($file1, 'a+');
if ( $Handle === false ) {
    $File = "C:\Websites\wordpress\win\\".$uploads_dir."\import-"  . date('m-d-Y-g-ia') . ".txt";
    $Handle = fopen($File, 'a+');
}

このようにして、Web経由とWindows経由のスケジュールされたタスクの両方でphpスクリプトを使用できます。

4

2 に答える 2

0

fopen または fwrite に完全な URL を使用したことはありません。これらは私が最初に見るものです:

  • $log_dir を echo したときの出力は何ですか?
    • ディレクトリは存在しますか?
  • 権限は正しく設定されていますか?
  • スクリプトを実行する前にファイルを作成した場合、ファイルへの書き込みは成功しますか?
  • fopen の後の $Handle3 の値は?
  • 最後の行で呼び出した fwrite の戻り値は何ですか?
  • エラー処理はすべてに設定されていますか? (デバッグ用である必要があります)
于 2013-10-10T02:55:06.887 に答える
0

fopen がファイルを開くのに失敗しているようです。ファイルが正常に開かれたことを確認します。

$Handle3 = fopen($File3, 'a+');

if( $Handle3 === false ) echo 'Unable to open file';

失敗した場合は、以下の項目を 1 つずつ確認してください。

  • ファイル/フォルダのパーミッションを確認してください。
  • パス内の別のスラッシュ"/"で確認してください"\"
  • 絶対パス(フルパス)で動作するか確認してください。
  • 次の前にディレクトリを変更して確認しfopenます。chdir('path\to\php\script')
  • など。

問題がパスにある場合、両方のケースで機能させる1つの方法は次のとおりです。

//  First try with the path that works from web
$File3 = "" . $log_dir . "/" . date('m-d-Y') . ".txt"; 

$Handle3 = fopen( $File3, 'a+' );

if( $Handle3 === false )
{
//  It failed so may be scheduled task invoked the script
//  So use the path that works in invoked by scheduled task
    $File3 = "path\that\works\from\command\line"; 
    $Handle3 = fopen( $File3 ,'a+' );
}
if( $Handle3 === false )
{
    echo 'Failed to open file';
    exit;
}
else
{
//  What ever
}
于 2013-10-10T03:27:56.170 に答える