【发布时间】:2016-10-15 06:56:33
【问题描述】:
更新 1: 根据此代码的要求,我得到了
<?php
require_once 'Conf.php';
use Nemiro\Nginx\Conf as NginxConf;
$conf = new NginxConf('/etc/nginx/sites-available/proxy');
echo '<pre>'.var_dump($conf['server']['server_name']->ParametersAsString()).'</pre><br>';
echo '<pre>'.var_dump($conf['server']['location']).'</pre>';
?>
我明白了
字符串(9)“本地主机”
object(Nemiro\Nginx\Directive)#8 (3) { ["Name"]=> string(8) "location" ["参数"]=> 数组(1) { [0]=> 字符串(1) "/" } ["指令"]=> object(Nemiro\Nginx\DirectiveCollection)#9 (1) { ["Items"]=> array(1) { ["proxy_pass"]=> 对象(Nemiro\Nginx\Directive)#10 (3) { ["Name"]=> 字符串(10)“proxy_pass”[“参数”]=>数组(1){[0]=>字符串(19) "http://127.0.0.1:80" } ["指令"]=> object(Nemiro\Nginx\DirectiveCollection)#11 (1) { ["Items"]=> array(0) { } } } } } }
但是我如何只提取“localhost”和“proxy_pass”之类的?非常感谢!
所以我现在有这个数组
object(Nemiro\Nginx\Directive)#2 (3) { ["Name"]=> string(6) "server"
["Parameters"]=> NULL ["Directives"]=>
object(Nemiro\Nginx\DirectiveCollection)#3 (1) { ["Items"]=> array(3)
{ ["listen"]=> object(Nemiro\Nginx\Directive)#4 (3) { ["Name"]=>
string(6) "listen" ["Parameters"]=> array(1) { [0]=> string(2) "80" }
["Directives"]=> object(Nemiro\Nginx\DirectiveCollection)#5 (1) {
["Items"]=> array(0) { } } } ["server_name"]=>
object(Nemiro\Nginx\Directive)#6 (3) { ["Name"]=> string(11)
"server_name" ["Parameters"]=> array(1) { [0]=> string(9) "localhost"
} ["Directives"]=> object(Nemiro\Nginx\DirectiveCollection)#7 (1) {
["Items"]=> array(0) { } } } ["location"]=>
object(Nemiro\Nginx\Directive)#8 (3) { ["Name"]=> string(8) "location"
["Parameters"]=> array(1) { [0]=> string(1) "/" } ["Directives"]=>
object(Nemiro\Nginx\DirectiveCollection)#9 (1) { ["Items"]=> array(1)
{ ["proxy_pass"]=> object(Nemiro\Nginx\Directive)#10 (3) { ["Name"]=>
string(10) "proxy_pass" ["Parameters"]=> array(1) { [0]=> string(19)
"http://127.0.0.1:80" } ["Directives"]=>
object(Nemiro\Nginx\DirectiveCollection)#11 (1) { ["Items"]=> array(0)
{ } } } } } } } } } 80string(9) "localhost"
这是通过调用来完成的
var_dump($conf['server']);
if ($conf['server']->ContainsChild('listen'))
{
print_r($conf['server']['listen']->ParametersAsString());
}
var_dump($conf['server']['server_name']->ParametersAsString());
var_dump($conf['server']['root']->ParametersAsString());
var_dump($conf['server']['location']);
如果我想调用例如“http://127.0.0.1:80”而不显示任何其他内容,我该怎么办?所以它会像
echo $conf['server']['location']['proxy_passs']
但以上不起作用?有什么想法吗?
我在 Github 上在线上传了代码,解析器不是我的代码。我正在尝试使用它,它可以让我轻松编辑 nginx 文件,如果你找到更好的代码请告诉我
【问题讨论】:
-
你的转储是一个对象,把
放在它周围,这样会更容易阅读
-
那不是数组。这是一个对象。
-
如果您只需要实际的本地主机地址/域名,则无需转储所有其他对象。您只需要最后两个之一: var_dump($conf['server']['root']->ParametersAsString());或 var_dump($conf['server']['location']);尝试转储这些并将其张贴在这里。您只需要调用正确的对象,就可以轻松搞定。