在运行PHP脚本之前,是否可以通过命令行参数要求引入一个.php文件?

4

情况

我正在运行带有bash 4兼容的shell的Linux。

我有两个文件:

A.class.php:

<?php

class A{

    public static function foo(){
        echo "foo\n";
    }
}

A.php:

<?php

A:foo();

问题

在不编辑文件的情况下,是否可能要求在从命令行运行A.php之前先加载A.class.php?

类似于:

php --require "A.class.php" A.php 

我尝试了以下方法

我尝试将<?php require 'A.class.php' ?> 和文件A.php的内容连接起来,然后通过管道传输到php中,如下:

echo "<?php require 'A.class.php'?>$(<A.php)" | php

这种方法效果不错,但有点繁琐,需要写很多代码。也许有更简单的方法来实现这个功能吗?


php -B '<?php require "test.php"?>' <test_run.php?或者可能是 php -B '<?php require "test.php"?>' -f - <test_run.php - Etan Reisner
@EtanReisner 这个不行!PHP解析错误:在命令行开始代码的第1行中出现语法错误,意外的文件结尾。顺便说一下,我不得不更改文件名。 - aichingm
2
另一种预先包含另一个脚本的选项是 php -d "auto_prepend_file=before.php" main.php - mario
@mario 这看起来非常有前途!我会尽快测试并告诉你是否有效。非常感谢! - aichingm
@mario 这个很好用。你想自己创建一个答案还是我可以接受VolkerK的答案?#repMatters - aichingm
只需勾选Volkers的答案。打勾标记也是为了未来的用户,它表示您认为最实用的是什么。(添加了一个单独的答案。虽然这不那么通用。) - mario
4个回答

5
您可以使用-d directive=value来设置auto_prepend_file指令。
php -d auto_prepend_file=A.class.php -f A.php

或者你可以传递直接加载脚本的PHP代码作为参数,而不是传递脚本文件名:

php -r "require 'A.class.php'; require 'A.php';"

请注意,当与“-r”一起使用时,auto_prepend_file不会被解析,这不是错误,而是按设计的方式 https://bugs.php.net/bug.php?id=33430 - Wadih M.

1
作为另一种选择,总是有“Unix方式”:
 cat first.php second.php | php -C

在运行PHP之前,它会将脚本连接在一起。

  • auto_prepend_file=不同的是,它可以处理多个脚本的连续运行。(并不妨碍中央预加载脚本。我个人已经使用它来处理兼容性代码。)

  • 但是,这取决于正确的<?php ... ?>脚本封装 - 每个脚本都有开放和关闭标签(经典的PHP编码风格,而不是新手/PSR-x节俭)。

  • (可以使用phptags -w -c *.php来修复现有的PHP文件以实现此目的。)


0
你要找的可能是 -f 开关。
php -f phpFileToParseAndRunFirst.php

您可以始终创建一个短的 PHP 文件来先运行,以便为您执行所需操作:

<?php
require ('pathToRequiredPhpFile1.php');
require ('pathToRequiredPhpFile2.php');

// Or even use the include to bring a .php file into the currently running script file as if it were a part of the script.

来自PHP官网


抱歉,创建一个新文件并不能回答我的问题。从标题上看:通过命令行参数。你能更具体地说明一下 -f 开关吗?据我理解,我需要将 A.class.php 作为 -f 的参数传递,但是我该如何传递我想要运行的文件呢? - aichingm

0

这里有一个更好的例子。在您拥有A.class.php的同一目录中,创建一个简单的php init文件(init.php),其中包含以下代码:

<?php
include "A.class.php";
$x = new A;
$x->foo();

现在从命令行运行以下命令:

php -f init.php

输出:

foo

请查看php的文档,了解include语句以及require()和require_once()函数,因为它们可以一起使用来完成您想要做的事情。


没有编辑任何文件。创建了一个名为 init.php 的新文件作为引导文件,php应该执行以加载所需的文件。我还演示了使用 include,建议查看 require() 和 require_once()。另一个建议是使用composer。有一个 -R 选项可能适合您(我自己没有使用过),其中它看起来可以将要执行的php脚本文件传输进去。祝你好运... :) - RyanNerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接