我正在使用以下函数来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;
}
有谁知道可能导致此行为的原因是什么?
答案 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是一个有效的路径,我不明白为什么这不起作用。