Вывод plist напрямую или запись в файловую систему - PullRequest
0 голосов
/ 17 марта 2011

Я работаю с PHP-библиотеками CFPropertyList и, похоже, по умолчанию используются методы записи / сохранения файлов 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 Ответ

1 голос
/ 18 марта 2011

Возможно:

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

Редактировать: Рефакторинг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...