I'm just confused why Rar::open() would be static, there should be a constructor instead.
I think $rar = new RarArchive(...); is much better than $rar = RarArchive::open(...); that is the real OOP style.
(PECL rar >= 2.0.0)
RarArchive::open -- rar_open — Abre un archivo RAR
Estilo orientado a objetos (método):
$filename
, string $password
= NULL, callable $volume_callback
= NULL): RarArchive|falseEstilo por procedimientos:
$filename
, string $password
= NULL, callable $volume_callback
= NULL): RarArchive|falseAbre un archivo RAR especificado y devuelve la instancia RarArchive que lo representa.
Nota:
Si el archivo a abrir esta dividido en volúmenes, se deberá pasar la ruta del primer volúmen como parámetro de la función. De lo contrario, no todos los archivos se mostraran.
filename
Ruta del archivo Rar.
password
Contraseña en texto plano, si fuera necesario descifrar la cabecera del archivo. También se utilizará por defecto si hay archivos encriptados encontrados. Tenga en cuenta que los archivos pueden poseer diferentes contraseñas en cuanto a las cabeceras y entre ellos.
volume_callback
Una función que recibe como parámetro la ruta del volúmen que no fue encontrado
y retorna una cadena con la ruta correcta para dicho archivo o null
si el volúmen no existe o no es conocido.
El programador debería asegurar que la función pasada no cause bucles, ya que esta función es
llamada repetidas veces si la ruta devuelta en una llamada previa no corresponde
con el volúmen solicitado. Especificando este parámetro se omite
la notice que se emitiría cuando un volúmen no es encontrado; una implementación que solo devuelva null
puede, por lo tanto, utilizarce para omitir dichos notices.
En versiones menores a 2.0.0 de PHP, esta función no manejaria rutas relativas correctamente. Use realpath() como una solución.
Devuelve una instancia del RarArchive solicitado o false
en caso de error.
Versión | Descripción |
---|---|
PECL rar 3.0.0 |
volume_callback fue agregada.
|
Ejemplo #1 Estilo orientado a objetos
<?php
$rar_arch = RarArchive::open('encrypted_headers.rar', 'samplepassword');
if ($rar_arch === FALSE)
die("Failed opening file");
$entries = $rar_arch->getEntries();
if ($entries === FALSE)
die("Failed fetching entries");
echo "Found " . count($entries) . " files.\n";
if (empty($entries))
die("No valid entries found.");
$stream = reset($entries)->getStream();
if ($stream === FALSE)
die("Failed opening first file");
$rar_arch->close();
echo "Content of first one follows:\n";
echo stream_get_contents($stream);
fclose($stream);
?>
El resultado del ejemplo sería algo similar a:
Found 2 files. Content of first one follows: Encrypted file 1 contents.
Ejemplo #2 Estilo por procedimientos
<?php
$rar_arch = rar_open('encrypted_headers.rar', 'samplepassword');
if ($rar_arch === FALSE)
die("Failed opening file");
$entries = rar_list($rar_arch);
if ($entries === FALSE)
die("Failed fetching entries");
echo "Found " . count($entries) . " files.\n";
if (empty($entries))
die("No valid entries found.");
$stream = reset($entries)->getStream();
if ($stream === FALSE)
die("Failed opening first file");
rar_close($rar_arch);
echo "Content of first one follows:\n";
echo stream_get_contents($stream);
fclose($stream);
?>
Ejemplo #3 Volume Callback
<?php
/* En este ejemplo, hay un volúmen llamdo multi_broken.part1.rar
* cuyo próximo volúmen es llamado multi.part2.rar */
function resolve($vol) {
if (preg_match('/_broken/', $vol))
return str_replace('_broken', '', $vol);
else
return null;
}
$rar_file1 = rar_open(dirname(__FILE__).'/multi_broken.part1.rar', null, 'resolve');
$entry = $rar_file1->getEntry('file2.txt');
$entry->extract(null, dirname(__FILE__) . "/temp_file2.txt");
?>
I'm just confused why Rar::open() would be static, there should be a constructor instead.
I think $rar = new RarArchive(...); is much better than $rar = RarArchive::open(...); that is the real OOP style.