https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Operaci%C3%B3ns_con_ficheiros&feed=atom&action=historyCurso POO PHP Operacións con ficheiros - Historial de revisiones2024-03-29T13:55:46ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_Operaci%C3%B3ns_con_ficheiros&diff=37001&oldid=prevVlourido: /* Sistema de ficheiros */2013-10-23T11:39:27Z<p><span dir="auto"><span class="autocomment">Sistema de ficheiros</span></span></p>
<p><b>Página nueva</b></p><div>== Operacións con ficheiros ==<br />
<br />
Coa distribución de PHP inclúense extensións que permiten traballar directamente co sistema de arquivos:<br />
<br />
* '''[http://docs.php.net/manual/es/book.filesystem.php Sistema de Ficheiros]''' forma parte do núcleo de PHP, e inclúe funcións para ler, escribir, copiar, borrar, renomear, etc., ficheiros do sistema.<br />
* '''[http://docs.php.net/manual/es/book.dir.php Directorios]''' tamén forma parte do núcleo de PHP, e como o seu nome indica permite traballar cos directorios do sistema de ficheiros.<br />
* '''[http://es1.php.net/manual/es/book.fileinfo.php Fileinfo]''' inclúese por defecto coa distribución de PHP a partir da versión 5.3, aínda que debe ser activada no ficheiro de configuración php.ini. Inclúe funcións para descubrir o contido dos ficheiros.<br />
<br />
=== Sistema de ficheiros ===<br />
<br />
Dentro desta extensión inclúense un bo número de funcións. Entre outras, son moi empregadas '''[http://es1.php.net/manual/es/function.basename.php basename]''', que dada unha ruta obtén o nome do arquivo ao que fai referencia (ou do último directorio se a ruta non inclúe arquivo), e '''[http://es1.php.net/manual/es/function.dirname.php dirname]''', que opera xusto ao contrario devolvendo a ruta que se lle pasa sen o arquivo (ou o directorio pai no caso de que a ruta orixinal non incluira arquivo). Por exemplo:<br />
<br />
<source lang="php"><br />
echo basename('/var/www/blog/web/index.php'); // Amosa index.php<br />
echo basename('/var/www/blog/web/') . PHP_EOL; // Amosa web<br />
echo dirname('/var/www/blog/web/index.php') . PHP_EOL; // Amosa /var/www/blog/web<br />
echo dirname('/var/www/blog/web/') . PHP_EOL; // Amosa /var/www/blog<br />
</source><br />
<br />
A forma máis sinxela de ler o contido dun ficheiro dende PHP é empregando a función '''[http://docs.php.net/manual/es/function.file-get-contents.php file_get_contents]''', que pasa o contido do ficheiro a unha cadea, ou a función '''[http://docs.php.net/manual/es/function.file.php file]''', que pasa o contido do ficheiro a un array (cada liña do ficheiro pasa a ser un elemento do array).<br />
<br />
<source lang="php"><br />
$fich = file_get_contents("proba.txt");<br />
if($fich === false) die("ERRO! Non se puido encontrar o ficheiro.");<br />
</source><br />
<br />
Calquera das dúas funcións admiten como parámetros ficheiros remotos empregando os protocolos HTTP ou FTP.<br />
<br />
<source lang="php"><br />
$fich = file_get_contents("http://www.google.es");<br />
if($fich === false) die("ERRO! Non se puido encontrar a páxina.");<br />
</source><br />
<br />
Igualmente, para escribir un ficheiro a forma máis sinxela é empregar a función '''[http://docs.php.net/manual/es/function.file-put-contents.php file_put_contents]''', que pasa o contido dunha cadea a un ficheiro.<br />
<br />
<source lang="php"><br />
$fich = file_put_contents("proba.txt", "Contido a escribir no ficheiro");<br />
if($fich === false) die("ERRO! Non se puido crear o ficheiro.");<br />
</source><br />
<br />
Outro xeito de ler e escribir o contido dun ficheiro é empregar as funcións herdadas da linguaxe C, entre outras: [http://docs.php.net/manual/es/function.fopen.php fopen], [http://docs.php.net/manual/es/function.fread.php fread], [http://docs.php.net/manual/es/function.fwrite.php fwrite], [http://docs.php.net/manual/es/function.fgets.php fgets], [http://docs.php.net/manual/es/function.fputs.php fputs], [http://docs.php.net/manual/es/function.fseek.php fseek], [http://docs.php.net/manual/es/function.feof.php feof] e [http://docs.php.net/manual/es/function.fclose.php fclose]. Por exemplo:<br />
<br />
<source lang="php"><br />
$fich = fopen("proba.txt", "r");<br />
if($fich === false) die("ERRO! Non se puido ler o ficheiro.");<br />
<br />
while(!feof($fich)) {<br />
$line = fgets($fich);<br />
echo $line;<br />
}<br />
</source><br />
<br />
=== Directorios ===<br />
<br />
A extensión '''Directorios''' é semellante á anterior, pero centrándose no traballo cos directorios e o seu contido. Inclúe unha serie de funcións que poden funcionar de dous xeitos:<br />
<br />
* Empregando variables de tipo ''resource'' para facer referencia a un directorio. Cando se abre un directorio empregando a función '''[http://www.php.net/manual/es/function.opendir.php opendir]''', obtense unha variable que se pode empregar posteriormente nos accesos a ese mesmo directorio. Deste xeito podemos ter varios directorios abertos ao mesmo tempo, cadanseu coa sus propia variable.<br />
<br />
:Se non precisamos traballar con varios directorios de forma simultánea, podemos obviar a variable devolta por ''opendir''. As posteriores chamadas as outras funcións como '''[http://www.php.net/manual/es/function.readdir.php readdir]''' ou '''[http://www.php.net/manual/es/function.closedir.php closedir]''' actuarán sobre o recurso aberto na última chamada a ''opendir''.<br />
<br />
<div style="margin-left: 2em;"><br />
<source lang="php"><br />
if (opendir('.') !== false) {<br />
while (($item = readdir()) !== false) {<br />
echo $item . '<br />';<br />
}<br />
closedir();<br />
}<br />
</source><br />
</div><br />
<br />
* Abrendo o directorio coa función '''[http://www.php.net/manual/es/function.dir.php dir]''' e empregando posteriormente as propiedades e os métodos do obxecto da '''[http://www.php.net/manual/es/class.directory.php clase Directory]''' devolto.<br />
<br />
<div style="margin-left: 2em;"><br />
<source lang="php"><br />
if (($d = dir('.')) !== false) {<br />
while (($item = $d->read()) !== false) {<br />
echo $item . '<br />';<br />
}<br />
$d->close();<br />
}<br />
</source><br />
</div><br />
<br />
=== Iteradores do sistema de ficheiros ===<br />
<br />
A partir da versión 5 de PHP inclúese coa distribución a '''[http://docs.php.net/manual/es/book.spl.php biblioteca estándar (SPL)]''', que está formada por un conxunto de clases e interfaces de uso común. Entre eles temos a clase iterador '''[http://docs.php.net/manual/es/class.directoryiterator.php DirectoryIterator]''', que permite percorrer de forma sinxela os obxectos do sistema de ficheiros. Por exemplo, para listar os ficheiros e directorios na ruta na que se atopa o script, poderías facer:<br />
<br />
<source lang="php"><br />
foreach (new DirectoryIterator('.') as $fich) {<br />
if($fich->isDot()) continue;<br />
echo $fich->getFilename() . "<br>\n";<br />
}<br />
</source><br />
<br />
A partires de PHP5.3 inclúese tamén o iterador '''[http://docs.php.net/manual/es/class.filesystemiterator.php FilesystemIterator]''', que herda de DirectoryIterator extendendo a súa funcionalidade.<br />
<br />
<br />
--[[Usuario:Vlourido|Víctor Lourido]] 16:08 15 jul 2013 (CEST)</div>Vlourido