我遇到问题NSProcessInfo's
arguments
属性。我正在创建一个命令行工具,需要解码使用PHP脚本从互联网传递的base64代码以及其他一些参数。数据通过很好,但由于某种原因。 [[NSProcessInfo processInfo] arguments]
返回21个参数,即使我只传递一个base64字符串。自变量]问题目标-C
下面是它的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.
基于64位的代码是有点长,所以我把它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数据。) – zneak
在发布之前,我已经这样做了。它显示了一个将base64代码分解成18个部分的数组。 – Pripyat
那么也许你可以分享结果:) – zneak