繁体   English   中英

iPhone IOS:PHP 脚本执行时间过长?

[英]IPhone IOS: PHP script taking too much time to execute?

我正在尝试在我的应用程序中运行 php 脚本,该脚本将检查用户的登录变量与数据库中的变量。 下面的代码是我执行文件的方式。 我正在运行脚本,然后将结果存储在 arrays 中。 “是”结果表示用户的登录数据正确,“否”结果表示不正确。

此代码有效,但我的问题是时间。 我已经设置了计时器,即使我的 php 文件是 BLANK ,执行第一个块也需要 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"];

同样在第一个代码块中,大约 4 次中有 1 次出现此错误“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"];
NSString* res = nil;
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://domain.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];

实际上,我只是在用上面的代码做同样的事情,而且我只用了不到一秒钟的时间。 试试看!

还可以尝试通过浏览器访问您的check_login.php ,看看是否需要很长时间才能加载。 如果是这种情况,则是您的 PHP 文件导致了问题。 如果它立即加载(就像它应该的那样),那就是您的 Objective-C 代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM