此问题仅在第一次调用时发生。 第二次,没有错误,没有问题。 每天调用一次以更新货币汇率。
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);
}
答案 0 :(得分:2)
您根本不需要touch()
。 touch()
将创建文件(如果它不存在(但它存在,因为您刚创建它)或者它将设置当前日期和时间的时间(这已由fclose()
完成)
无论哪种方式,你都会做一些已经完成的事情。
那就是说,正确答案是Mark Baker的答案:你需要给touch()
一个文件名,而不是文件句柄。
更新:你问,“第二次,没有错误,没有问题 - 为什么?”。我看不出你怎么能打电话给那个电话而不得到错误。即使fopen
失败并返回false
,您也会收到来自touch()
的错误消息。所以我担心这个“第二次”功能确实根本没有被调用,或者有一些微妙的错误阻止其执行触及touch()。也可能引发错误 ,但它会以某种方式被捕获或隐藏。
但我知道这一点:touch(<resource>)
将每次都失败。
答案 1 :(得分:1)
touch
需要一个文件名imo。您正在为其提供文件句柄$pFile
。
将touch($pFile);
更改为touch(self::OPT_FILE);
并查看其有效。