Domanda

È possibile utilizzare il php: // temp wrapper per generare un file XML con Xmlwriter? Mi piacciono le funzionalità che fornisce (memoria per piccoli file, file temporaneo trasparente per un output più grande) ma non riesco a ottenere la sintassi (se è anche possibile):

<?php

header('Content-type: text/xml; charset=UTF-8');

$oXMLWriter = new XMLWriter;
$oXMLWriter->openURI('php://temp');
$oXMLWriter->startDocument('1.0', 'UTF-8');

$oXMLWriter->startElement('test');
$oXMLWriter->text('Hello, World!');
$oXMLWriter->endElement();

$oXMLWriter->endDocument();
// And now? *******
$oXMLWriter->flush();
È stato utile?

Soluzione

Non capisco lo scopo di scrivere in un file di temperatura. Forse vuoi:

$oXMLWriter->openURI('php://output');

Non ho mai usato XMLWriter Ma non sembra prendere un manico per un puntatore del file. Penso che sia davvero quello che vuoi.

Per le risatine, ecco qualcosa che avvolge l'interfaccia temporanea:

class WeirdStream
{
  static public $files = array();
  private $fp;

  public function stream_open($path)
  {
    $url = parse_url($path);
    self::$files[$url['host']] = fopen('php://temp', 'rw');
    $this->fp = &self::$files[$url['host']];
    return true;
  }

  public function stream_write($data)
  {
    return fwrite($this->fp, $data);
  }
}

stream_wrapper_register('weird', 'WeirdStream');

$oXMLWriter = new XMLWriter;
$oXMLWriter->openURI('weird://a');
// .. do stuff
$oXMLWriter->flush();

Ora puoi arrivare al puntatore del file:

$fp = WeirdStream::$files['a'];

Può essere puramente in memoria o può essere un file temporaneo sul disco.

È quindi possibile eseguire il lancio attraverso la riga di dati per riga:

fseek($fp, 0, SEEK_SET);
while (!feof($fp)) $line = fgets($fp);

Ma questo è tutto molto strano per me.

Altri suggerimenti

Cosa devi fare con il contenuto di php://temp infine? Se hai solo bisogno di un'archiviazione temporanea, solo memoria, puoi utilizzare openMemory():

$oXMLWriter = new XMLWriter;
$oXMLWriter->openMemory();
$oXMLWriter->startDocument('1.0', 'UTF-8');

$oXMLWriter->startElement('test');
$oXMLWriter->text('Hello, World!');
$oXMLWriter->endElement();

$oXMLWriter->endDocument();
echo $oXMLWriter->outputMemory ();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top