作为 cronjob 运行时 PHP 自动加载问题

发布于 2024-11-01 10:09:13 字数 408 浏览 4 评论 0原文

我有以下文件结构:

cron.php /includes/functions.php /classes/ClassName.php

corn.php 包含functions.php 调用new ClassName()。并且functions.php 包含原始自动加载器:

 function __autoload($class_name) {
   require_once('classes/'.$class_name.'.php');
 }

当从浏览器调用cron.php 时,它可以正常工作。但是,如果从 shell 运行,则会出现“没有此类文件或目录”致命错误。我尝试将 'classes/'.$class_name.'.php' 包装到 realpath() 函数中,但无济于事。请指教。

I have the following file structure:

cron.php
/includes/functions.php
/classes/ClassName.php

corn.php includes functions.php calls new ClassName(). And functions.php contains the primitive autoloader:

 function __autoload($class_name) {
   require_once('classes/'.$class_name.'.php');
 }

which works fine when cron.php is called from browser. However if run from shell it is giving "No such file or directory" fatal error. I tried to wrap 'classes/'.$class_name.'.php' into realpath() function to no avail. Please advise.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

被你宠の有点坏 2024-11-08 10:09:13

您可以使用 dirname(__FILE__) 来获取自动加载 PHP 脚本的“绝对”当前目录。

您可以执行类似的操作(假设您的自动加载脚本位于项目的子目录中):

function __autoload($class_name) {
  require_once(dirname(__FILE__).'/../classes/'.$class_name.'.php');
}

请参阅:

You may use dirname(__FILE__) to get the "absolute" current directory of your autoloading PHP script.

You could do something like (supposing your autoloading script is in a subdirectory of your project):

function __autoload($class_name) {
  require_once(dirname(__FILE__).'/../classes/'.$class_name.'.php');
}

See:

吃→可爱长大的 2024-11-08 10:09:13
 function __autoload($class_name) {
   require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
 }
 function __autoload($class_name) {
   require_once(dirname(__file__) . '/classes/'.$class_name.'.php');
 }
断念 2024-11-08 10:09:13

你是如何安排工作的?如果文件是 /path/to/cron.php,请尝试以下操作:
“cd /path/to && php cron.php”,您现在可能会执行类似“php /path/to/cron.php”的操作,并且 $PWD 不在 /path/to/ 那里,因此找不到类

how did you schedule the job? if the file is /path/to/cron.php, try something like:
"cd /path/to && php cron.php", you probably do something like "php /path/to/cron.php" now, and $PWD is not /path/to/ there so classes is not found

就像说晚安 2024-11-08 10:09:13

因为您使用的是相对路径,所以从浏览器和 CLI 调用时,它所在的 PHP 目录是不同的。

使用此功能更改目录以匹配浏览器目录。

更新:从建议中建议代码。

chdir(dirname(__FILENAME__));

Because you are using relative path, and PHP directory it is in is different when invoke from browser and from CLI.

Use this function to change the directory to match the browser directory.

UPDATE: Suggest code from suggestion.

chdir(dirname(__FILENAME__));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文