0

回答我在下面!

所以我有一个可以通过网络完美运行的 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 和通过 windows 的计划任务使用 php 脚本。

4

2 回答 2

0

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

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

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

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

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

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

  • 检查文件/文件夹权限。
  • 在路径中"/"使用不同的斜线检查。"\"
  • 检查它是否适用于绝对路径(完整路径)。
  • 通过更改目录之前检查fopenchdir('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
}
于 2013-10-10T03:27:56.170 回答