需要建议通过php编辑php

时间:2013-11-05 07:40:43

标签: php parsing

我有一个用PHP编写的配置文件,如下所示,

<?php

class WebConfig {

    public static $WEBPATH = '/customers';
    public static $ACCOUNTPATH = '/empaccountpath';
    public static $INFO = '/accountInfo';
    const ACCOUNT_STATUS = '/account_status';
    const ENABLE_SEARCH = '/enable_search';
}

?>

所以我想在PHP中开发一个界面,它能够编辑$WEBPATH$ACCOUNTPATHconst值等文件值。

简单的PHP编辑器脚本将完成上述工作。但它没有检查语法。

请建议如何有效地在PHP中完成。

2 个答案:

答案 0 :(得分:3)

更好的解决方案

许多其他配置存储格式更适合此类事情。查看php file returns arrayinijsonxmlyaml

PHP文件返回数组”是一个简单的PHP文件,看起来像这样     

return(
    array(
        'config_key' => 'config_value'
    )
);

?>

当您将代码包含在代码中时,您的代码可以检索此文件的返回值:$x = include('file.php');$x将包含数组中的值。

INI很简单&amp;直观地为人类阅读或书写。它的结构有限。 PHP可以使用一个函数读取它,但它只在一个单独的(非默认)包中具有写入功能。这意味着你必须自己生成ini文件。

JSON“相当”简单&amp;直观地为人类阅读或书写。它具有灵活的结构可扩展结构。 PHP只能使用几个函数读写JSON文件。不幸的是,PHP不保留JSON漂亮的打印格式,所以在你覆盖一个文件后,它将全部在一行中,之后更难以阅读。

XML很简单&amp;对于人类而言,它是直观易读的,它可以提供非常丰富的信息,因为它对于所有内容都非常冗长。我的结构几乎和JSON一样灵活,并且可以扩展。 PHP可以读取和写入XML,但这样做意味着使用少量代码行(5-10代表简单的东西)。

YAML是另一种易于阅读和编写的选项,PHP没有直接的YAML支持,但还有其他选项(见下文)。它的结构灵活且可扩展。对我个人来说,YAML的理解不太直观。

Zend_Config可用作读/写任何上述格式的接口,可用于抽象文件格式本身,并为您的应用程序提供与格式无关的处理配置的方式。

您还可以使用数据库来存储您的配置或专用于存储配置的单独SQLite数据库 - 这通常在需要以细粒度可搜索格式保留许多配置时使用,这种格式允许各种类型的分层覆盖(例如:一般默认值,控制器默认值,操作默认值,特定情况默认值)。

如何在PHP

中执行此操作

你不需要像@geomagas那样创建语言解析器。使用includerequire时,PHP解释器会将“new”类加载到内存中并确保它可用。

您需要做的就是创建一个模板文件,在其中替换一些值,例如:

<?php

class WebConfig {

    public static $WEBPATH = '$_replace_webpath';
    public static $ACCOUNTPATH = '$_replace_accountpath';
    public static $INFO = '$_replace_info';
    const ACCOUNT_STATUS = '$_replace_account_status';
    const ENABLE_SEARCH = '$_replace_enable_search';
}

然后加载读取文件,并将其替换为当前值,例如:

$config_template = file_get_contents('/path/to/config/template.php.template');
str_replace(
    array('$_replace_webpath' ... ),
    array('/customers' ... ),
    $config_template
);

PrestaShop使用PHP文件进行配置。它会在需要时重写它们。

答案 1 :(得分:0)

直接访问PHP类文件太危险....许多安全问题......

我们可以使用简单的html表单让用户进行编辑。

使用JSON格式存储到文件中。

PHP编码&amp;由json_encode()&amp;解码json_decode(),当保存&amp;读取价值。