2011-05-09 69 views
4

使用PHP 5.3的JSON字符串,如果我发送一个JSON字符串编码通过命令行的arugment ...PHP-CLI似乎解析从参数

/usr/local/bin/php -q /path/to/script.php {"key":"test","cache":1} 

...在script.php的代码:

<?php print_r($argv); ?> 

我回去:

Array 
(
    [0] => /path/to/script.php 
    [1] => key:test 
    [2] => cache:1 
) 

这是完全出乎意料!

虽然我可以忍受这一点,但我想知道这是由PHP记录的,所以我100%确定它会像这样工作,如果我每次都传递一个JSON编码的字符串作为参数。

同样,JSON字符串内的数组似乎没有按预期工作。

+0

你弄清楚如何在PHP脚本的命令行参数解析JSON? – 2013-05-23 17:44:53

回答

4

如果想在命令行参数使用特殊字符,你应该总是encapse他们在报价

"{\"key\":\"test\",\"cache\":1}" 

'{"key":"test","cache":1}' 
+0

是的我认为,但有趣的是,PHP试图解析字符串,但这个功能似乎并不为人所熟知。 – fire 2011-05-09 15:30:43

+0

@Fire:它的记录:http://php.net/manual/en/reserved.variables.argv.php – 2011-05-09 15:35:03

+2

正如你可以在你的输出中读取它的未解析。在命令行中,您可以通过列表符号'{a,b,c}'(例如在'mkdir -p path/to/{folderA,folderB}'中)一次定义多个参数。 JSON对象看起来很相似,因此被误解了。据我所知,它不是PHP的错误,而只是CLI调用“工作”的方式。 – KingCrunch 2011-05-09 15:37:21