从 Perl 脚本运行 PHP
Posted
技术标签:
【中文标题】从 Perl 脚本运行 PHP【英文标题】:Running PHP from Perl Script 【发布时间】:2012-10-18 02:44:24 【问题描述】:我正在尝试从我的 goDaddy 共享主机上的 perl 脚本运行 php 脚本。我最初编写的 PHP 脚本超过了 120 秒的时间限制和 mysql 内存限制,所以我将脚本分成几个部分。
我希望这一切都作为一个 cron 作业运行,所以我想调用一个运行 4-5 个 php 脚本的 perl 脚本。
这是我的网站,使用 Drupal 7 运行。
我写了一个 perl 脚本,内容如下:
my $command = '/web/cgi-bin/php5 -q $HOME/html/phpscript1.php';
exec ($command) or print STDERR "couldn't exec $command: $!";
其中调用了一个包含类似以下内容的 php 脚本:
<?php
define('DRUPAL_ROOT', getcwd());
include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
....
do stuff
....
?>
但是当我从 perl 运行它时(在我的 $HOME 目录和 html 目录中都试过)我在运行脚本时看到了以下问题(其中 XXXXXX 是我的 Godaddy 帐户文件夹):
<b>Notice</b>: Undefined index: SCRIPT_NAME
<b>/home/content/05/XXXXXXX/html/includes/bootstrap.inc</b> on line <b>1627</b><br />
<br />
<b>Notice</b>: Undefined index: REMOTE_ADDR in
<b>/home/content/05/XXXXXXX/html/includes/bootstrap.inc</b> on line <b>2802</b><br />
<br />
<b>Notice</b>: Undefined index: argc in
<b>/home/content/05/XXXXXXX/html/includes/bootstrap.inc</b> on line <b>3290</b><br />
我推断这些是 FastGCI 的问题,我可能需要定义/导出/将这些索引/变量指向某些东西,但经过大量搜索后,我无法找出要做什么。
PHP 脚本使用 CURL 将图像从外部服务器复制到我的服务器
【问题讨论】:
【参考方案1】:您收到 php 通知是因为您在自定义 php 脚本中引导 Drupal,而这些变量未在 cli 上定义。
该 php 脚本可能会更好地实现为 Drush 命令。 Drush 已经设置了 Drupal 期望定义的所有变量,并为您提供了一个框架,可以在 Drupal 实例中轻松运行自定义代码。即使您不想费心编写自定义命令,也可以像这样使用 drush 的脚本命令:
drush scr $HOME/html/phpscript1.php
此外,值得指出的是,这些只是 php 通知。它们不太可能导致您的脚本出现任何问题。
【讨论】:
感谢您的帮助。您对仍在运行的代码是正确的,但我担心错误。我尝试安装 drush,但我不认为没有 root 访问权限(愚蠢的 goDaddy)【参考方案2】:所以这里的答案是不要像在你的 drupal 站点中那样引导 Drupal(例如在模块中创建函数)。相反,创建一个 .php 文件,其中包含您需要的功能,并在 Drupal 之外使用它(例如,在您的 html 文件夹上方)。感谢 Mark 的快速帮助。
【讨论】:
以上是关于从 Perl 脚本运行 PHP的主要内容,如果未能解决你的问题,请参考以下文章
Perl Apache 脚本按预期从 browser-perfroms 运行关闭正在运行的 perl 实例,但是当尝试启动新的 perl 实例时它啥也不做