【问题标题】:PHP fopen() with command linePHP fopen() 带命令行
【发布时间】:2013-10-17 15:29:23
【问题描述】:

回答我在下面!

所以我有一个可以通过网络完美运行的 PHP 脚本。我想将它设置在运行虚拟主机的服务器上的计划任务上。它是一个 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 中给出的布尔值

工作!!好吧,这就是我所采用的,它似乎很有效。

$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 使用 php 脚本,也可以通过 windows 在计划任务上使用 php 脚本。

【问题讨论】:

    标签: php command-line-interface fopen


    【解决方案1】:

    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
    }
    

    【讨论】:

    • 是的,这就是我走的路线。编辑组织问题。
    【解决方案2】:

    我从未将完整的 url 用于 fopen 或 fwrite。这些是我首先要看的东西:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2011-05-29
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多