0

此问题仅在第一次调用时发生。第二次,没有错误,没有问题。每天调用一次以更新货币汇率。

private function updateRates()
    {
        $szContent = file_get_contents(self::OPT_URL);

        if(!$szContent)
        {
            throw new Exception('XML resource unavailable.');
        }

        $pXML = new SimpleXMLElement($szContent);
        $aRates = array();

        foreach($pXML->Cube->Cube->Cube as $pChildren)
        {
            $aRates[(string) $pChildren['currency']] = (float) $pChildren['rate'];
        }

        $pFile = fopen(self::OPT_FILE, 'w+');
        fwrite($pFile, json_encode($aRates));
        fclose($pFile);
        touch($pFile);

    }
4

2 回答 2

2

你根本不需要touch()touch()如果文件不存在(但它存在,因为您刚刚创建它)将创建该文件,或者它将时间设置为当前日期和时间(这已经由 完成fclose())。

无论哪种方式,你都会做一些已经做过的事情。

也就是说,正确的答案是 Mark Ba​​ker 的答案:您需要提供touch()文件名,而不是文件句柄。

更新:您问,“第二次,没有错误,没有问题 - 为什么?”。我看不出您如何调用该调用而不会收到错误。即使fopen失败并返回false,你也会从touch(). 所以我担心这个“第二次”要么函数根本没有被调用,要么有一些微妙的错误阻止它的执行到达 touch()。也有可能引发错误但它会以某种方式被捕获或隐藏。

但我肯定知道:每次touch(<resource>) 都会失败。

于 2013-01-17T10:48:27.133 回答
1

touch需要一个文件名,imo。你给它文件句柄$pFile

更改touch($pFile);touch(self::OPT_FILE);查看它是否有效。

于 2013-01-17T10:47:57.897 回答