在不包含

时间:2016-01-19 19:11:42

标签: php

我有一个文件,我们称之为first.php。它回应了很多文字。在该文本中,我还想包含另一个文件,second.php回声。我希望在不包含second.php代码的情况下执行此操作,因为存在冲突。

TL; DR我希望PHP脚本执行另一个脚本,等待它打印,然后回显它打印的任何内容。

尝试

echo something
include second script
echo something else

但由于所述碰撞,它无法发挥作用。第二个脚本只打印一个简短的纯文本。

更好的例子

  • a.php打印"你好"和#34;世界"并声明$i=1
  • b.php打印"美丽"并声明$i=2
  • 我想打印"你好美丽的世界"并$i=1

3 个答案:

答案 0 :(得分:1)

您可以通过CLI使用shell_exec

运行第二个脚本
echo something
shell_exec("php second.php");
echo something else

但是,如果第二个脚本需要访问由网络服务器设置的变量,例如$_GET$_SERVER,则无法使用此功能。如果需要传递某些变量,可以将它们作为命令行参数发送。但是第二个脚本必须使用$argv访问它们,而不是$_GET

shell_exec("php second.php " . escapeshellarg($_GET['id']));

second.php可以从$argv[1]获取ID。

答案 1 :(得分:1)

Imo你应该通过不重用共享范围的变量来解决实际问题。如果你不能这样做,这意味着你在当前范围内投入太多。但是,如果你真的想这样做,你可以将它包装在一个函数中(它有自己的范围)。

<?php

$i = 1;
echo 'hello';
echo call_user_func(function() {
    // in your case this would be a include statement

    $i = 2;

    return 'beautiful';
});
echo 'world';

var_dump($i); // 1

如果你确实需要&#34; import&#34;来自当前范围的变量创建了一个闭包:

<?php

$i = 1;
echo 'hello';
echo call_user_func(function() use ($theVariable) {
    // in your case this would be a include statement

    $i = 2;

    return 'beautiful';
});
echo 'world';

var_dump($i); // 1

答案 2 :(得分:1)

您可以在函数中包含第二个文件。函数有自己的变量范围。因此,第二个文件的变量不能用第一个脚本文件的相同名称覆盖变量。

$myvar = 1;
include 'first.php';
callSecond ();
echo $myvar;

function callSecond () {
    include 'second.php';
}

echo $ myvar 会提供 1 ,即使'second.php'指定$ myvar = 2;