iPhone/PHP:缓存 XML 结果


iPhone/PHP: Caching XML results

嗯,我的问题很奇怪,因为它真的没有意义。

1)我有一个PHP脚本,它带来了一个XML,其中包含存储在MySQL数据库中的一些信息;

2)当我第一次使用此脚本(或任何其他脚本)时,它为我带来了所有更新的信息(直到那一刻插入的所有注册表);

3)当我再次使用此脚本(或任何其他脚本)时,无论我的数据库中有多少个新注册表,它都会给我带来我第一次使用该脚本时带来的注册表;

*我已经在我的浏览器上测试了这个脚本,它工作正常,总是带来数据库的最新状态。

我能做什么?感谢。

编辑:

1) 我如何调用 XML 解析器:

NSString *strURL = @"localhost/scripts/bringmethexml-x5.php";
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];
XMLProcessor *processor = [[XMLProcessor alloc]initProcessor];
[processor syncProcessorWithData:dataURL];
NSMutableArray *a = processor.xmlObjects;

2) 我的 PHP 脚本:

<?php
    header("Content-type: text/xml");
    echo "<?xml version='"1.0'" encoding='"LATIN-1'"?>";
    echo "<!DOCTYPE plist PUBLIC '"-//Apple//DTD PLIST 1.0//EN'" '"http://www.apple.com/DTDs/PropertyList-1.0.dtd'">";
    echo "<plist version='"1.0'">";
    function getXML($sql="SELECT user FROM database.Posts"){
        $conn   = mysql_connect ("localhost", "user", "password");
        $db     = mysql_select_db("database");
        $result = mysql_query($sql, $conn);
        $column = "";
        echo "<array>";
        while($row = mysql_fetch_assoc($result)){
        $column .= "<dict>";
            foreach ($row as $key => $value){
                $column .= "<key>$key</key>";
                $column .= "<string>$value</string>";
            }
            $column .= "</dict>";
        }
        echo $column;
        echo "</array>";
        echo "</plist>";
    }       
    getXML("SELECT user as USER, msg as MESSAGE, hashtag_1 as ST1, hashtag_2 as ST2, hashtag_3 as ST3, hashtag_4 as ST4, hashtag_5 as ST5, date as DATEPOSTED, coordinate_lat as COORLAT, coordinate_lon as COORLON FROM database.Posts;");
    mysql_close();
?>

3)我的XML是如何出来的:

<?xml version="1.0" encoding="LATIN-1"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <array>
    <dict>
        <key>(key || nome da fileira do db)</key>
            <string>(valor||object)</string>
        <key>(key || nome da fileira do db)</key>
            <string>(valor||object)</string>
    </dict>
    <dict>
        <key>(key || nome da fileira do db)</key>
            <string>(valor||object)</string>
        <key>(key || nome da fileira do db)</key>
            <string>(valor||object)</string>
    </dict>
    </array>
</plist>

4)XMLProcessor是我做的一个解析器,它从NSURL获取NSData,然后将其转换为字符串,我解析它以适应NSMutableDictionary,这是该类的链接:

http://www66.zippyshare.com/v/7711833/file.html

解决此问题的一种简单(如果有点黑客)方法是向 url 添加一个随机变量,您并不真正用于任何用途。

例如 http://www.yourwebsite.com/somestuff.xml?random=343453

由于每次 URL 都不同,因此它不会使用缓存。

您也可以通过添加锚点来做到这一点:http://www.yourwebsite.com/somestuff.xml#623764527

这是一个自动化它的函数,只需将其应用于您的 nsstring URL 即可

yourURL = [self getUniqueURL:yourURL];

-(NSString*)getUniqueURL:(NSString*)originalURL
{
    NSInteger random = (arc4random() % 100000000) + 1;
    NSString* uniqueURL = [NSString stringWithFormat:@"%@#%d",originalURL,random];
    return uniqueURL;
}