PHP:Copy()生成空文件

时间:2012-01-06 13:29:19

标签: php

我正在使用以下函数来copy()一个文件,文件大小通常为1-50KB,并且创建了一个正确名称的文件,但它完全为空。

public function backup() {
    $backup = $this->_root.'/cfg_'.date('d_m_y').'.backup';
    if (!copy($this->_file, $backup))
        return false;
    return $backup;
}

我确定$this->_file正确指向我试图复制的文件。 $this->_file由同一个类的另一个方法创建,我在其上执行一个八进制值为0755的chmod(),如下面的函数所示:

private function createFile($filename) {
    if (!($this->_pointer = @fopen($filename, 'cb')))
        return false;
    fclose($this->_pointer);
    chmod($filename, 0755);
    return true;
}

有谁知道可能导致此行为的原因是什么?

3 个答案:

答案 0 :(得分:3)

问题已解决:问题是我在fopen()上执行了$this->_file这样的呼叫:

if (!($this->_pointer = @fopen($this->_file, "wb")))
    throw new Exception("Unable to retrieve database configuration");

这导致$this->_file被截断,我还没有写入它,所以在执行copy()操作时$this->_file本身为空,因此没有显示错误。

对于那些在fopen()调用函数中给出答案的人道歉并未包含在我的问题中。

答案 1 :(得分:1)

一个显而易见的事情是确保您在要复制的位置有可用空间。

答案 2 :(得分:0)

这可能是权限问题。您确定该脚本对该文件具有读取权限吗?如果$ this-> _file是一个有效的路径,我不明白为什么这不起作用。