No estoy seguro si esto es posible, pero se ha convertido en una lucha académica ahora.PHP zip_open() y php: // temp, parece que no se puede abrir
Usando el truco __halt_compiler()
para incrustar datos binarios en un archivo PHP, he creado un pequeño script de auto-apertura, que se fseek()
a __COMPILER_HALT_OFFSET__
(no ver demasiado duro como este ejemplo preciso se documenta en el manual)
de todas formas, he guardado un pequeño bulto de los datos binarios ZIP (una sola carpeta que contiene un único archivo que dice "hola mundo") después de mi llamada a __halt_compiler()
Lo que he intentado hacer es copie los datos directamente al php://temp
corriente, y lo han hecho con éxito (si rewind()
y passthru()
la referencia de flujo temporal, que vuelca los datos)
$php = fopen(__FILE__, 'rb');
$tmp = fopen('php://temp', 'r+b');
fseek($php, __COMPILER_HALT_OFFSET__);
stream_copy_to_stream($php, $tmp);
Mi problema viene con intentar ahora abierta php://temp
con zip_open()
$zip = zip_open('php://temp');
Por lo que puedo ver (a pesar otros tales pos ibilities como la falta de apoyo arroyo con
zip_open()
) El problema aquí es la no permanencia inherente de los datos enphp://memory
yphp://temp
corrientes entre los mangos. Si esto puede solucionarse, quizás sea de hecho posible.
Mantiene relajarse código de error 11
, que he encontrado ninguna documentación en (aparentemente, al igual que la mayoría de los otros códigos de error posibles)
var_dump($zip); // int(11)
Como señaló @cweiske, código de error
11 = ZipArchive::ER_OPEN
, No se puede abrir el archivo
¿Es esta consecuencia a mi intento de utilizar la corriente php://temp
, o algún otro posible problema? También sé que existe un enfoque OOP (ZipArchive
, y otros) pero pensé que comenzaría por lo básico.
¿Alguna idea?
Alrighty, por lo que el código de error ** 11 ** es un ** error abierto ** de acuerdo con http://www.php.net/manual/en/function.ziparchive-open.php#102849 respecto a la 'ZipArchive 'clase. Asumo que esto se traduce ya que la clase sería un envoltorio para la misma funcionalidad de extensión. El comentario – Dan
previamente vinculado también hace mención de dicho error devuelto al variar el sistema operativo Windows, al intentar descomprimir un archivo almacenado en 'c: \ windows \ temp' que mi tentativa de utilizar el' php: // temp' corriente que puede volcar a un archivo cuando la longitud de los datos excede el límite, no estaría allí, y cambié a 'php: // memory' de todos modos, todavía resultando en un ** error abierto **. – Dan
Gracias @Gordon - * Editado *; no, no escribiendo, solo leyendo en realidad. Gracias – Dan