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


Is it possible to require a .php file via command line parameter before running a php script?

情况

我使用bash4兼容的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

它运行得很好,但有点粗糙,需要写很多东西。也许有一些更简单的方法可以做到这一点?

您可以使用-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';"

作为另一种选择,总是有Unix方式:

 cat first.php second.php | php -C

它在通过PHP运行之前将脚本连接在一起。

  • auto_prepend_file=不同的是,这也适用于两个以上的串联脚本。(这并不妨碍中央预加载脚本。个人已经将其用于兼容性代码。(

  • 但是,它取决于正确的<?php ... ?>脚本外壳-在每个脚本中打开关闭标签(经典的PHP编码风格,而不是noob/PSR-x stinted(。

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

您要查找的可能是-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网站

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

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

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

php-f init.php

输出:

foo

看看php的include语句文档以及require((和requireonce((函数,因为它们都可以一起使用来完成我认为您正在尝试的操作。