touch()期望参数1为字符串,给定资源

时间:2013-01-17 10:44:15

标签: php filesystems

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

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);

    }

2 个答案:

答案 0 :(得分:2)

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

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

那就是说,正确答案是Mark Ba​​ker的答案:你需要给touch()一个文件名,而不是文件句柄。

更新:你问,“第二次,没有错误,没有问题 - 为什么?”。我看不出你怎么能打电话给那个电话而得到错误。即使fopen失败并返回false,您也会收到来自touch()的错误消息。所以我担心这个“第二次”功能确实根本没有被调用,或者有一些微妙的错误阻止其执行触及touch()。也可能引发错误 ,但它会以某种方式被捕获或隐藏。

但我知道这一点:touch(<resource>) 每次都失败。

答案 1 :(得分:1)

touch需要一个文件名imo。您正在为其提供文件句柄$pFile

touch($pFile);更改为touch(self::OPT_FILE);并查看其有效。