【问题标题】:rename() not working in cron jobrename() 在 cron 作业中不起作用
【发布时间】:2016-07-21 20:03:00
【问题描述】:

rename() 从命令行运行良好,但从 cron 作业运行时,rename() 不能。由于 connect.php 文件有效,我假设 cron 作业位于正确的目录中,但无法弄清楚为什么 rename() 不起作用。我尝试了绝对路径,但它们不起作用:

<?php 
include 'connect.php';

$oldlocation='xxx/xxx/'.$oldfilename;
$newlocation='yyyy/xxx/'.$newfilename;
$move=rename("$oldlocation","$newlocation");

cron作业:* * * * * /usr/bin/php /usr/xxx/xxx/xxx/xxx.php -q -f

我没有对服务器的 root 访问权限。这应该通过 SHELL 脚本运行吗?

【问题讨论】:

  • 您的 $oldlocation$newlocation 似乎是作为相对路径给出的。 Cron 可能会从不同的位置执行您的脚本,请尝试将它们设为绝对位置。
  • 您确定您的绝对路径设置正确吗? Cron 绝对不适用于相对路径,但您必须确保您的绝对路径是从根目录定义的 - 类似于 include '/home/youraccount/public_html/includes/connect.php';
  • connect.php 文件的工作方式完全如图所示,我不知道为什么,但是 rename() 需要绝对路径,我在路径的开头缺少 /,php 不需要我猜在浏览器或命令行中,但绝对路径需要,我再次猜测,但会研究。感谢您的回复

标签: php cron rename crontab


【解决方案1】:

cron 执行时的当前路径是运行cron 进程的用户的home 目录。另见post

只需将相对路径更改为绝对路径即可解决问题。

【讨论】:

    【解决方案2】:

    解决方案,而不是直接的目录问题(好吧): $oldlocation='xxx/xxx/'.$oldfilename; 必须改为: $oldlocation='/xxx/xxx/'.$oldfilename; 我想我错过了第一个/

    【讨论】:

    • 这是jojonasSean CunninghamI 提到的绝对路径。第一个/ 是告诉系统使用绝对路径的字符。
    • 好的,谢谢。出于某种原因,我无法在其他地方找到绝对路径必须以 / 开头,我花了很多时间试图弄清楚。在最初的问题中,我提到我已经尝试过绝对路径,所以我知道我需要它们,但是在代码中我显示了不正确的路径格式,这是我无法弄清楚的。感谢您的回复。
    • 如果您接受我的回答会很好,因为它解决了您的问题。谢谢
    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多