为什么crontab -e不能执行fwrite写入文件?蹦溃了。

BILLSSJONE 2013-04-08 12:11:18
function Write_FileFun_new($filename,$filedir, $htmldata = '') {
if(!is_dir($filedir)) {
mkdir($filedir, 0777);
}
$htmlfile = $filedir.$filename;
if($fp = fopen($htmlfile, 'wbt')) {
fwrite($fp,$htmldata);
fclose($fp);
} else {
echo "<center><p>Can not write to files, please check directory $htmldir.</p></center>";
exit;
}
}
$testnum_temp="<?php \$testnum = ".(intval($testnum)+1)."; ?>";
Write_FileFun_new("test.php","inc/", $testnum_temp);


用浏览器运行页面是正常写入的,
在crontab -e中设置定时每分钟执行一次没有写入文件,crontab -e定时执行是正常,可以每分钟执行一次。
为什么会这样,就差这一个地方了,其它程序都正常执行,就差这个不能写入。为什么啊?
...全文
410 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
BILLSSJONE 2013-04-09
  • 打赏
  • 举报
回复
谢谢,没想到包含文件的路径。
xuzuning 2013-04-09
  • 打赏
  • 举报
回复
不是说了吗? 相对路径 要先弄清楚是相对谁的
BILLSSJONE 2013-04-09
  • 打赏
  • 举报
回复
我晕,现在可以了,谢谢, 原来是include_once('inc/test.php');的问题,不知道为什么用相对路径会不行(浏览器运行是正常的),路径结构又没错。 改成include_once('/var/www/html/inc/test.php');就正常了。
BILLSSJONE 2013-04-09
  • 打赏
  • 举报
回复
PHP Notice: Undefined variable: testnum in /var/www/html/write.php on line 28 命令行运行出错, 好象找不到变量testnum,这个变量是在write.php里的include_once('inc/test.php'); 也就是上面的要写入的文件内容$testnum_temp="<?php \$testnum = ".(intval($testnum)+1)."; ?>"; 初始test.php里面已经有内容<?php $testnum =1; ?> 为什么会找不到这个变量?
xuzuning 2013-04-09
  • 打赏
  • 举报
回复
既然 web 方式下可以成功,那么 crontab 中也应该成功 差异的产生,可能与你的目录创建和文件打开方式有关 一般web方式下是以apache的模块方式运行的,而crontab中是以 cli 方式运行的 两者使用了不同的主控文件,而文件操作这种基础函数理应放在主控文件中,因为他自己也要用 极有可能是 cli 方式下的 fopen 不能正确处理只在window中才有效的 t 模式,而导致失败 我想你在控制台中运行 /usr/bin/php /var/www/html/write.php 应该是可以看到错误信息的 手册中说 Note: 再一次,为移植性考虑,强烈建议你重写那些依赖于 't' 模式的代码使其使用正确的行结束符并改成 'b' 模式。
黄袍披身 2013-04-09
  • 打赏
  • 举报
回复
写一个sh,处理好权限 在这个文件里调用/usr/bin/php /var/www/html/write.php 最后在crontab 使用root 身份调用..
BILLSSJONE 2013-04-08
  • 打赏
  • 举报
回复
Write_FileFun_new("test.php","/var/www/html/inc/", $testnum_temp); 改用绝对路径也不行啊,这个有没有权限要求的啊?test.php是设为777的
BILLSSJONE 2013-04-08
  • 打赏
  • 举报
回复
crontab -e的设定是: */1 * * * * /usr/bin/php /var/www/html/write.php inc/ 是/var/www/html/inc test.php是在/var/www/html/inc/test.php 我在浏览器运行write.php是成功写入的啊……
xuzuning 2013-04-08
  • 打赏
  • 举报
回复
inc/ 是相对路径 请先弄清楚是相对谁的
BILLSSJONE 2013-04-08
  • 打赏
  • 举报
回复
test.php里面的内容一直是<?php $testnum = 1; ?>,值是1没有变过,就是没有自动加1后写入test.php文件。
BILLSSJONE 2013-04-08
  • 打赏
  • 举报
回复
请问命令行怎么写?直接打这个吗:*/1 * * * * /usr/bin/php /var/www/html/write.php
hw80520997 2013-04-08
  • 打赏
  • 举报
回复
你把crontab里面的命令直接在命令行运行一下看看什么反应
BILLSSJONE 2013-04-08
  • 打赏
  • 举报
回复
日记没警告啊,显示的是: Apr 8 02:59:01 localhost CROND[25675]: (root) CMD (/usr/bin/php /var/www/html/write.php)
xuyanlu 2013-04-08
  • 打赏
  • 举报
回复
看看日志,有什么警告信息吗?

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧