输出plist直接与写入文件系统

时间:2011-03-17 20:54:28

标签: php plist

我正在使用CFPropertyList PHP库,似乎默认方法是编写/保存plist文件。

由于我可以控制输出缓存,我认为跳过plist文件的写入并直接渲染它会更有效。

我如何修改CFPropertyList来执行此操作?

这是当前的保存功能:

public function save($file=null,$format=null) {
$file = $file ? $file : $this->file;
$format = $format ? $format : $this->format;

if( !in_array( $format, array( self::FORMAT_BINARY, self::FORMAT_XML ) ) )
  throw new PListException( "format {$format} is not supported, use CFPropertyList::FORMAT_BINARY or CFPropertyList::FORMAT_XML" );

if(!file_exists($file)) {
  // dirname("file.xml") == "" and is treated as the current working directory
  if(!is_writable(dirname($file))) throw IOException::notWritable($file);
}
else if(!is_writable($file)) throw IOException::notWritable($file);

$content = $format == self::FORMAT_BINARY ? $this->toBinary() : $this->toXML();

$fh = fopen($file, 'wb');
fwrite($fh,$content);
fclose($fh);
}

1 个答案:

答案 0 :(得分:1)

可能:

public function screen($file=null,$format=null) {
    $file = $file ? $file : $this->file;
    $format = $format ? $format : $this->format;

    if( !in_array( $format, array( self::FORMAT_BINARY, self::FORMAT_XML ) ) ) {
        throw new PListException( "format {$format} is not supported, use CFPropertyList::FORMAT_BINARY or CFPropertyList::FORMAT_XML" );
    } else {
        $fmt = ( $format == self::FORMAT_XML ? 1 : 0 );
        $content = ( $fmt ? $this->toXML() : $this->toBinary() );
        header('Content-Type: ' . ( $fmt ? 'text/xml' : 'application/octet-stream') );
        echo $content;
    }
}

修改:重构。