我不确定它的正确名称,但我正在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):无法打开流:没有这样的 第 2 行/home/bash/bash1.sh 中的文件或目录
如果我从require()
中删除?id=1
,它会执行而不会出错。
你在想网络...您放入require
的是 PHP 引擎将查找的实际文件名使用操作系统。 即它查找一个名为 bash2.sh?id=1
的文件,而您显然没有该文件。
要么你从内部调用另一个脚本,比如说用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
不能向硬盘驱动器上的静态文件添加参数。但是您可以定义一个全局变量,该变量可由必需的脚本访问。
<?php
$id=1
require("bash2.php");
而对于你的bash2.php:
<?php
echo $id;
不,伙计你应该使用参数。当你执行php脚本时(我在cron作业中猜测),你添加像some.php variable1 variable2
这样的参数.....等',
然后在 PHP 中,你会得到带有 $argv[0], $argv[1] .... etc
的变体.
这就是 bash 脚本的方式。
尝试这样的事情:
<?php
$id = $_GET['id'];
exec("./bash2.sh $id");
?>
然后在 bash 脚本中,您将能够访问作为 $1 传递的第一个参数。
更多信息在这里和这里
希望这有帮助!