我遇到問題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