私は自分のアプリケーションでデータベースのログイン変数をチェックするPHPスクリプトを実行しようとしています。以下のコードは、ファイルの実行方法です。私はスクリプトを実行して、配列に結果を格納しています。 「はい」の結果はユーザーのログインデータが正しいことを意味し、「いいえ」の結果はそれが正しくないことを意味します。IPhone IOS:PHPスクリプトの実行に時間がかかりますか?
このコードは機能しますが、私の問題は時間です。私はタイマーを設定しています。私のPHPファイルが空白の場合でも、最初のブロックを実行するのに8秒かかります。他のすべて、でも、次のページをロードすることははるかに高速である(3秒トップス)
//first block
NSString * post = [NSString stringWithFormat:@"userId=%@&password=%@",userId.text,password.text];
NSString * hostStr = @"http://domain.com/check_login.php?";
hostStr = [hostStr stringByAppendingString:post];
NSURL *location = [NSURL URLWithString:hostStr];
NSDictionary *dictionaryData = [[ NSDictionary alloc ] initWithContentsOfURL:location ];
//second block
NSArray *resultArray = [dictionaryData objectForKey:@"result"];
NSArray *loginidArray = [dictionaryData objectForKey:@"loginid"];
NSArray *usernameArray = [dictionaryData objectForKey:@"username"];
だけでなく、コードの最初のブロックの間に、約1〜4回のうち、私はこのエラーが出る「SendDelegateMEssage:デリゲートを返すために失敗しました10秒間待ってからメインループモード:_kCFURLConnectionPrivateRunLoopMode "を実行します。私はそれを調べようとしてきましたが、自分のコードに従って何が意味するのか分かりません。私はこのエラーが発生すると、コードは30〜60秒かかることがあります!!!
いずれの方向にも感謝します。
おかげで、
アマンダ
それがコード内でサーバーサイドを何が起こっているか知っていると便利です包み、PHPを含むように編集。
<?php
header('Content-type: text/xml');
session_start();
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist SYSTEM \"file://localhost/System/Library/DTDs/PropertyList.dtd\">\n<plist version=\"1.0\">\n";
$username = "user";
$password = "pass";
$host = "localhost";
$database = "database";
// Make the connect to MySQL or die
// and display an error.
$link = mysql_connect($host, $username, $password);
if (!$link) {
die('Could not connect: ' . mysql_error());
error_log("CANT CONNECT DB");
}
else
{
error_log("DB CONNECTED");
}
mysql_select_db ($database);
$userId = $_GET['userId'];
$password = $_GET['password'];
$sql = "SELECT user_login_id,userid from user_login WHERE userId ='". $userId ."' AND password ='".$password."'";
$rs_login = mysql_query($sql, $link) or die (mysql_error());
if(mysql_num_rows($rs_login) ==1)
{
$row = mysql_fetch_array($rs_login);
$user_login_id = $row['user_login_id'];
$user_login_name = $row['userid'];
// The data that needs to be transferred:
$my_data = array();
$my_data["result"] = array("YES");
$my_data["loginid"] = array($user_login_id);
$my_data["username"] = array($user_login_name);
// Open the dictionary
echo "<dict>\n";
// Putting the data into the plist format
foreach ($my_data as $key => $array)
{
// Loop for every value in $my_data
echo " <key>$key</key>\n <array>\n"; // Make a key with the key from $my_data and open an array for it's values.
foreach ($array as $value)
{ // Go through every value in the current array from $my_data
echo " <string>$value</string>\n"; // Print the value as a string in the array
}
echo " </array>\n"; // Close the array
}
echo "</dict>\n</plist>\n"; // Close the dictionary & plist
}
else
{
$my_data["result"] = array("NO");
$my_data["loginid"] = array("--");
$my_data["username"] = array("--");
// Open the dictionary
echo "<dict>\n";
// Putting the data into the plist format
foreach ($my_data as $key => $array)
{
// Loop for every value in $my_data
echo " <key>$key</key>\n <array>\n"; // Make a key with the key from $my_data and open an array for it's values.
foreach ($array as $value)
{ // Go through every value in the current array from $my_data
echo " <string>$value</string>\n"; // Print the value as a string in the array
}
echo " </array>\n"; // Close the array
}
echo "</dict>\n</plist>\n"; // Close the dictionary & plist
}
mysql_free_result($rs_login);
?>
ソリューション
は、ここで私は一緒に行ったものだ、とそれだけでみんなありがとう...今にログ用の4秒かかります。
NSHTTPURLResponse * response = nil;
NSError* error = nil;
NSString * post = [NSString stringWithFormat:@"userId=%@&password=%@",userId.text,password.text];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL: [NSURL URLWithString:@"http://domainname.com/check_login.php?"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&error];
NSString *result = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization
propertyListFromData:returnData
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:&format
errorDescription:&errorDesc];
if (!temp) {
NSLog(@"Error reading plist: %@, format: %d", errorDesc, format);
}
NSArray *resultArray = [temp objectForKey:@"result"];
NSArray *loginidArray = [temp objectForKey:@"loginid"];
NSArray *usernameArray = [temp objectForKey:@"username"];
デスクトップWebブラウザからそのファイルにアクセスしようとすると、サーバーからの応答にどれくらいの時間がかかりますか? – esqew
1秒。私が言ったように、このファイルにアクセスするには、たとえそのファイルが空白であっても、かなりの時間がかかります。 – amanda
私自身の好奇心の中で、それから辞書を直接形成できるように出力をどのようにフォーマットしていますか?私のWebサービスでは、JSONを出力し、パーサを使用して辞書に変換します。そして、PHPを投稿すると助けになるかもしれません。 –