php – 创建“双向”配置文件

前端之家收集整理的这篇文章主要介绍了php – 创建“双向”配置文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写针对非极客,非程序员的 PHP应用程序.我需要创建一个带有一堆“选项”的选项页面,然后将这些选项存储在某个地方.使用数据库应用程序(MysqL / Postgresql / sqlite)是不可能的,因为它需要比用户需要更多的配置(我不希望用户在他不想要时进行任何类型的配置) .因此,剩下的唯一解决方案是将配置写入配置文件.另一方面,我还希望配置文件是人类可读的,以防用户是极客并且他想直接编辑配置文件(或者如果他想通过SSH或任何原因远程编辑文件). ..)

以下是我发现的几种潜在解决方案:

使用JSON文件

…从文件中检索数据,使用json_decode转换数据,将其输出为HTML,检索任何更改,使用json_encode进行编码等.您可以获得图片.有一些我不喜欢这种方法的东西,主要的一点是使用PHP编码的JSON数据不会格式化,很难编辑而不事先重新格式化.

使用XML文件

我不会描述这个解决方案,因为我也不喜欢它……我不知道如何使用XSLT并且不想学习……而且因为它是一个非常重要的解决方案,至少与JSON解决方案相比.如我错了请纠正我.

使用INI文件

我喜欢INI文件,真的很喜欢它们!我认为它们真的是最具可读性的,并且很难搞砸(即:语法错误).该解决方案的问题在于没有本地方式来编写/编辑ini文件.我发现了一个主题,显示了一个自定义方法来编写一个…如果我找不到更好的东西,这可能是我将采用的解决方案……

使用两个文件

最后的解决方案似乎与INI解决方案一样合理.事实上,我可以使用INI文件作为“输入”(用户可以根据需要编辑的文件)和XML / JSON文件作为输出(每次用户更改选项时将由PHP编辑的文件网络前端).此时,最佳解决方案是,如果用户直接编辑配置文件,则要求用户手动重新加载配置,以便“输​​出”文件始终是最新的.

我知道上面的解决方案都不是完美的,这就是我创建这个主题以寻求建议的原因.什么是最好的解决方案?也许(可能)我错过了另一个解决方案.

最后一件事:YAML不是一个有效的解决方案,因为如果你不熟悉它,它会更容易弄乱语法. PHP也不是解决方案,因为用PHP编辑PHP是一件痛苦的事.如果我想要检索一些配置但不通过Web前端直接编辑它,PHP只是一个很好的解决方案.

INI

我自己写的是ini文件.正如你所说,语法非常简单,这就是你想要的配置文件. ini格式的“键值”配对正是您在数据库中获得的 – 没有数据库.

您可能已经看过相关的SO:create ini file,write values in PHP

另外,您可以使用parse_ini_file()来阅读它.

XML

XML并不是那么糟糕.编写它可能需要做更多的工作(并且用户可能不像ini文件那样清晰),但阅读它真的很容易.

创造它:

<?PHP
// Create file
$xml = new SimpleXMLElement( '<?xml version="1.0" ?><config></config>' );

// Add stuff to it
$xml->addChild( 'option1' );
$xml->option1->addAttribute( 'first_name','billy' );
$xml->option1->addAttribute( 'middle_name','bob' );
$xml->option1->addAttribute( 'last_name','thornton' );
$xml->addChild( 'option2' );
$xml->option2->addAttribute( 'fav_dessert','cookies' );

// Save
$xml->asXML( 'config.xml' );
?>

阅读:

<?PHP
// Load
$config = new SimpleXMLElement( file_get_contents( 'config.xml' ) );

// Grab parts of option1
foreach( $config->option1->attributes() as $var )
{
    echo $var.' ';
}

// Grab option2
echo 'likes '.$config->option2['fav_dessert'];
?>

哪个给你:

billy bob thornton likes cookies

SimpleXML的文档

> SimpleXML Docs index
> Basic Examples
>有关addChild()addAttribute()的详细信息,显示了如何生成各种XML结构(例如,嵌套标记属性)

原文链接:https://www.f2er.com/php/130446.html

猜你在找的PHP相关文章