我希望使用 PHP 读取文件,然后将其写入读取文件时不存在的目录。 我无法先创建目录,如下所述。 我不希望将其保存在临时目录中以防止可能的覆盖。 我是否可以读取文件,将其保存在内存中,然后再写入文件?
为什么我想这样做:我有以下清空目录的方法。 我现在需要这样做,但在清空目录的根目录中保留一个文件。 我知道我可以修改此方法以执行此操作,但我很少需要这样做,并且可能希望使用另一种方法。 相反,在调用此方法之前,我想复制有问题的文件,清空目录,然后将其放回原处。
/**
* Empty directory. Include subdirectories if $deep is true
*/
public static function emptyDir($dirname,$deep=false)
{
$dirname=(substr($dirname, -1)=='/')?$dirname:$dirname.'/';
if(!is_dir($dirname)){return false;}
// Loop through the folder
$dir = dir($dirname);
while (false !== $entry = $dir->read())
{
// Skip pointers
if ($entry == '.' || $entry == '..') {
continue;
}
elseif(is_file($dirname.$entry)) {
unlink($dirname.$entry);
}
elseif($deep && is_dir($dirname.$entry)){
self::deltree($dirname.$entry);
}
}
// Clean up
$dir->close();
return true;
}
如果这一切都是通过相同的请求完成的,那么是的,你可以。只需将文件内容保存到变量中,然后再次写回:
$temp = file_get_contents('path/to/file.ext');
className::emptyDir($dir);
file_put_contents('path/to/file.ext', $temp);
是的,可以做到。只需向类添加一个属性即可。因此,在您的类属性中,将有文件的内容,而对象存在,并且它确实设置了。它也可以是类变量(静态),因此如果您不需要,则无需实例化。
class anything {
var $fileContent = '';
public static function emptyDir($dirname,$deep=false) {
//....
}
public function setFileContent($fileOrUrlToRead) {
$this->fileContent = file_get_contents($fileOrUrlToRead);
}
public function saveFile($fileName) {
file_put_contents($fileName, $this->fileContent);
}
}
$anything = new anything();
$anything->setFileContent('url_or_path_of_file_to_get');
anything::emptyDir('./media/files/');
$anything->saveFile('./media/files/something.txt');
您可以使用会话保存所需的信息。