PHP fopen()与命令行

时间:2013-10-10 02:41:00

标签: php command-line-interface fopen

我以下的答案!

所以我有一个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为资源,在第686行的C:\ Websites \ wordpress \ win \ import.php中给出布尔值

PHP警告:file_get_contents(bins / bins-10-09-2013.txt):无法打开流:第692行的C:\ Websites \ wordpress \ win \ import.php中没有此类文件或目录

PHP警告:fwrite()要求参数1为资源,在第699行的C:\ Websites \ wordpress \ win \ import.php中给出布尔值

PHP警告:fclose()要求参数1为资源,在第709行的C:\ Websites \ wordpress \ win \ import.php中给出布尔值

WORKING !!嗯,这就是我的用途,似乎工作正常。

$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+');
}

这样我就可以通过网络和计划任务通过Windows使用php脚本。

2 个答案:

答案 0 :(得分:0)

我从来没有使用完整的网址来进行fopen或fwrite。这些是我首先要看的东西:

  • 回显$ log_dir时的输出是什么?
    • 目录是否存在?
  • 是否正确设置了权限?
  • 如果在运行脚本之前创建文件,那么它是否成功写入文件?
  • fopen之后$ Handle3的价值是多少?
  • 你在最后一行调用的fwrite的返回值是什么?
  • 是否将错误处理设置为全部? (它应该用于调试)

答案 1 :(得分:0)

似乎fopen无法打开文件。确保文件成功打开:

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

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

如果失败,请一次检查以下项目:

  • 检查文件/文件夹权限。
  • 在路径中使用不同的斜杠"/""\"进行检查。
  • 检查它是否适用于绝对路径(完整路径)。
  • 通过在fopen之前更改目录进行检查:chdir('path\to\php\script')
  • 等。

如果问题与路径有关,那么两种方法都可以使用:

//  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
}