NSProcessInfo's
arguments
プロパティで問題が発生しています。私はPHPスクリプトを使用してインターネットから渡されたbase64コードを、他の引数とともにデコードする必要があるコマンドラインツールを作成しています。データは何らかの理由で正常に処理されますが、 [[NSProcessInfo processInfo] arguments]
は、base64の文字列を1つだけ渡しても、21個の引数を返します。引数]問題目的-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を入れている:
は、ここでのObjective-Cの側です。誰もがなぜこのコードがこの多くの引数を返すのか知っていますか?それはちょうど1つの文字列であるはずですか? 編集:私は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(@"%@ "、引数)'を使って、プログラムの内容を正確に見ることができます。あなたの問題がすぐに明らかになる可能性があります。まず、base64の文字列に13個の空白文字があります。これは、自動的に少なくとも14個の引数を補うものです。 (あなたがそれを単一の引数として扱うためには、base64データを引用する必要があります。) – zneak
私はすでにここに投稿する前にそれをしました。 'base64'コードが18個に分割された配列を示しています。 – Pripyat
次に、結果を共有することができます:) – zneak