5

我不确定它的正确名称,但我正在我的 Linux 服务器上的 Bash 脚本中执行 PHP 代码。我有两个这样的 Bash 文件,并且希望能够将 GET 变量从一个文件传递到下一个文件。

这是第一个文件的简化版本:

#!/usr/bin/php -q
<?php

require("bash2.sh?id=1");

这是第二个文件的简化版本:

#!/usr/bin/php -q
<?php

echo $_GET['id'];

目前,当我在 Crontab 上执行第一个文件时,我收到一条错误消息:

PHP 警告:require(bash2.sh?id=1): failed to open stream: No such file or directory in /home/bash/bash1.sh on line 2

如果我?id=1从 中删除require(),它将执行而没有错误。

4

4 回答 4

2

您正在思考网络...您输入的require是 PHP 引擎将使用操作系统查找的实际文件名。即它寻找一个bash2.sh?id=1你显然没有的文件。

要么你从 withing 调用另一个脚本,比如用system('./bash2.sh 2'); 或者,包含,然后使用下面的方法来传递数据。

文件 1

<?php
$id = 1;
require("bash2.sh");

文件2

<?php
echo $id;

如果您使用第一个示例 ( system('./bash2.sh 2');) 那么在 bash2.sh 中您将通过以下方式访问该变量:

<?php
echo $argv[1]; //argv[0] is the script name
于 2012-11-27T16:50:00.203 回答
2

您不能将参数添加到硬盘驱动器上的静态文件。但是您可以定义一个可由所需脚本访问的全局变量。

<?php
$id=1
require("bash2.php");

对于你的 bash2.php:

<?php
echo $id;
于 2012-11-27T16:50:11.857 回答
1

不,伙计,您应该使用参数。当您执行 php 脚本(我猜是在 cron 作业中)时,您添加了诸如some.php variable1 variable2.....等之类的参数,

然后在 php 中你得到那个变量$argv[0], $argv[1] .... etc

这就是 bash 脚本的方式。

于 2012-11-27T17:24:32.100 回答
0

尝试这样的事情:

<?php

    $id = $_GET['id'];
    exec("./bash2.sh $id");

?>

然后在 bash 脚本中,您将能够访问作为 $1 传递的第一个参数。

更多信息在这里这里

希望这可以帮助!

于 2012-11-27T16:50:45.430 回答