【发布时间】:2011-07-11 02:36:12
【问题描述】:
我在使用 NSProcessInfo's arguments 属性时遇到问题。我正在创建一个命令行工具,该工具需要解码使用 PHP 脚本从 Internet 传递的 base64 代码以及其他一些参数。数据传递得很好,但出于某种原因。 [[NSProcessInfo processInfo] arguments] 返回 21 个参数,即使我只传递了一个 base64 字符串。
这是它的objective-c方面:
NSArray *arguments = [[NSProcessInfo processInfo] arguments];
if ([[arguments objectAtIndex:1] isEqualToString:@"-s"])
{
if ([arguments objectAtIndex:2] == nil)
{
printf("Error: No data\n");
[pool drain];
return 0;
}
NSString*data = [arguments objectAtIndex:2];
if ([data length] == 0)
{
printf("Error: No data\n");
[pool drain];
return 0;
}
NSString*password = @"";
if ([[arguments objectAtIndex:3] isEqualToString:@"-p"])
{
if ([arguments objectAtIndex:4] == nil)
{
printf("Error: No password\n");
[pool drain];
return 0;
}
else
{
password = [NSString stringWithString:[arguments lastObject]];
}
}
NSLog(@"Args: %i\n\n",[arguments count]); //returns 21? I expect 3.
base64 代码有点长,所以我把它放在here 上。有谁知道为什么这段代码会返回这么多参数?应该只有一串吧? 编辑: 我正在删除我的 PHP 脚本中的空格。见这里:
<?php
$url = $_GET['data'];
$query = "/Library/WebServer/email/emailsender -s";
$password = "-p somePassword";
$commandStr = trim("$query $url $password");
$commandStr = removeNewLines($commandStr);
echo $commandStr;
$output = shell_exec($commandStr);
echo "<pre>Output: $output</pre>";
function removeNewLines($string) {
$string = str_replace( "\t", ' ', $string );
$string = str_replace( "\n", ' ', $string );
$string = str_replace( "\r", ' ', $string );
$string = str_replace( "\0", ' ', $string );
$string = str_replace( "\x0B", ' ', $string );
return $string;
}
?>
【问题讨论】:
-
你可能想
NSLog(@"%@", arguments)这样你就可以看到你的程序得到了什么。您的问题有可能立即变得明显。首先,base64 字符串中有 13 个空格字符,它们自动组成至少 14 个参数。 (如果您希望将 base64 数据视为单个参数,则必须引用它。) -
在发帖之前我已经这样做了。它显示了一个数组,其中
base64代码分为 18 个部分。 -
那么也许你可以分享结果:)
-
trim删除字符串开头和结尾的空格;真的是你的意思吗? -
@Zneak - 你是我的英雄。把它放在引号里就行了。请将其作为答案发布,以便我将其标记为正确答案。
标签: php objective-c