# Aplicativos em PHP/Trabalhando em PHP com/Arquivos
## Abrir arquivo

fopen(filename, mode, [use_include_path]);
filename: pode ser simplesmente um nome, ou um caminho completo.
Exemplos: "arquivo.txt", "./arquivo.dat", "/data/data.txt".
mode: especifica o modo de abertura, ou seja, se o arquivo deve ser aberto para leitura, escrita, etc. Modos de abertura:

## fgets

Esta função é usada na leitura de strings de um arquivo. fgets lê "length - 1" bytes do arquivo. Por default lê 1024 bytes para o comprimento da linha. Se for encontrado o final da linha e o número de bytes especificados não tiver sido atingido, fgets terminará a leitura no final da linha (ou no final do arquivo, se for o caso). Eis a sua sintaxe:
fgets(handle, length);
- handle: handle do arquivo de onde os dados serão lidos;
- length: tamanho em bytes do buffer de leitura;
Exemplo:

## fgetc

Esta função permite ler caractere por caractere de um arquivo. Seguem a sintaxe e um exemplo de utilização:
fgetc(handle);
- handle: manipulador do arquivo de onde os dados serão lidos;

## file

Esta função lê um arquivo completo, e armazena cada linha do arquivo como um elemento de um array. Depois de ler todo o conteúdo do arquivo, file o fecha automaticamente, não sendo necessária uma chamada a fclose; Vejamos a sintaxe:

## Ler Arquivo Via URL

$fh = fopen("http://127.0.0.1/", "r");
file(filename);
- filename: nome ou caminho completo de um arquivo.
Exemplo:
Além dessas funções para leitura e escrita, existe ainda uma função bastante útil, que testa se o final do arquivo foi atingido. É a função feof, que tem a seguinte sintaxe:

## feof(handle)

- handle: handle do arquivo;
Exemplo:

## Teste se Arquivo pode ser lido

//Outro
<?php if (is_readable('http://127.0.0.1/index.html')) {
}else{ echo "Este arquivo não pode ser lido!"; }

## Espaço Total no Disco

<?php // ESPAÇO TOTAL NO DISCO $diretorio="c:/"; print disk_total_space($diretorio); print " ";

## Espaço Livre no Disco

// ESPAÇO LIVRE NO DISCO // $df contém o número de bytes disponível em "/" $df = disk_free_space("c:/"); print $df ?>

## Tamanho de Diretório, número de arquivos e sub-diretórios

<?php // CALCULANDO TAMANHO OCUPADO POR UM DIRETÓRIO, NR DE ARQUIVOS E SUBDIRETÓRIOS // http://www.go4expert.com/forums/showthread.php?t=290
function getDirectorySize($path) {
function sizeFormat($size) {
// Usando
$path="D:/_xampplite/htdocs/desweb/7AplicativosExemplo/extras"; $ar=getDirectorySize($path);
echo "

#### Detalhes : $path

echo "Tamanho total : ".sizeFormat($ar['size'])." "; echo "No. de arquivos : ".$ar['count']." "; echo "No. de diretórios : ".$ar['dircount']." "; ?>

## Tamanho de diretório

<? // CALCULANDO TAMANHO (BYTES) OCUPADO POR UM DIRETÓRIO // http://www.weberdev.com/get_example-4171.html
function dir_size( $dir ) {
echo dir_size("D:/_xampplite/htdocs/desweb/1LinguagemPHP/php/tutoriais/trabalhando_com"); ?>
<?php
// MAIS UMA ÓTIMA FUNÇÃO PARA LER O TAMANHO DE UM DIRETÓRIO
// * Description / Example: // *
// * This code will allow an individual to quickly obtain the size and number of files inside a directory recursively. // *
// * It also includes a convenient byte value converter to kilobyte, megabyte, gigabyte, or trilobyte accordingly.
<?php function DirStat($directory) { global $FolderCount, $FileCount, $FolderSize;
chdir($directory); $directory = getcwd; if($open = opendir($directory)) { //while($file = readdir($open)) { while(false !== ($file = readdir($open))) { if($file == '..' || $file == '.') continue; if(is_file($file)) { $FileCount++; $FolderSize += filesize($file); } elseif(is_dir($file)) { $FolderCount++; } } if($FolderCount > 0) { $open2 = opendir($directory); while($folders = readdir($open2)) { $folder = $directory.'/'.$folders; if($folders == '..' || $folders == '.') continue; if(is_dir($folder)) { DirStat($folder); } } closedir($open2); } closedir($open); } }
function ByteSize($bytes) { $size = $bytes / 1024; if($size < 1024){ $size = number_format($size, 2); $size .= 'kb'; } else { if($size / 1024 < 1024) { $size = number_format($size / 1024, 2); $size .= 'mb'; } elseif($size / 1024 / 1024 < 1024) { $size = number_format($size / 1024 / 1024, 2); $size .= 'gb'; } else { $size = number_format($size / 1024 / 1024 / 1024, 2); $size .= 'tb'; } } return $size; }
$folder = 'D:/1Enviar/Hoje'; $dir = getcwd; DirStat($folder, 0); chdir($dir); $FolderSize = ByteSize($FolderSize);
echo 'Folder Name: '.$folder.' '.chr(10); echo 'File Count: '.$FileCount.' '.chr(10); echo 'Folder Size:'.$FolderSize.' '.chr(10); ?>

## Trechos do Tutorial - The right way to read files with PHP da IBM

USANDO fscanf
fscanf
Coming back to string processing, fscanf again follows the traditional C file library functions. If you're unfamiliar with it, fscanf reads field data into variables from a file.
list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");
FUNÇÃO fpassthru
No matter how you've been reading your file, you can dump the rest of your data to your standard output channel using fpassthru.
fpassthru($fh);
my_file = file_get_contents("myfilename");
echo $my_file;
Although it isn't best practice, you can write this command even more concisely as:
echo file_get_contents("myfilename");
This article is primarily about dealing with local files, but it's worth noting that you can grab, echo, and parse other Web pages with these functions, as well.
echo file_get_contents("http://127.0.0.1/");
This command is effectively the same as:
$fh = fopen("http://127.0.0.1/", "r");
fpassthru($fh);
You must be looking at this and thinking, "That's still way too much effort." The PHP developers agree with you. So you can shorten the above command to:
readfile("http://127.0.0.1/");
The readfile function dumps the entire contents of a file or Web page to the default output buffer. By default, this command prints an error message if it fails. To avoid this behavior (if you want to), try:
@readfile("http://127.0.0.1/");
Of course, if you actually want to parse your files, the single string that file_get_contents returns might be a bit overwhelming. Your first inclination might be to break it up a little bit with the split function.
$array = split("\n", file_get_contents("myfile"));
But why go through all that trouble when there's a perfectly good function to do it for you? PHP's file function does this in one step: It returns an array of strings broken up by lines.
$array = file("myfile");
It should be noted that there is a slight difference between the above two examples. While the split command drops the newlines, the newlines are still attached to the strings in the array when using the file command (as with the fgets command).
PHP's power goes far beyond this, though. You can parse entire PHP-style .ini files in a single command using parse_ini_file. The parse_ini_file command accepts files similar to Listing 4.
Listing 4. A sample .ini file
The following commands would dump this file into an array, then print that array:
The following output is the result:
Of course, you might notice that this command merged the sections. This is the default behavior, but you can fix it easily by passing a second argument to parse_ini_file: process_sections, which is a Boolean variable. Set process_sections to True.
$file_array = parse_ini_file("holy_grail.ini", true);
print_r $file_array;
And you'll get the following output:
Listing 6. Output
PHP placed the data into an easily parsable multidimensional array.
This is just the tip of the iceberg when it comes to PHP file processing. More complex functions like tidy_parse_file and xml_parse can help you handle HTML and XML documents, respectively. See Resources for details on how these particular functions work. These are well worth looking at if you'll be dealing with those types of files, but instead of considering every possible file type you might run into in detail in this article, here are a few good general rules for dealing with the functions I've described thus far.
Good practice
Never assume that everything in your program will work as planned. For example, what if the file you're looking for has moved? What if the permissions have been altered and you're unable to read the contents? You can check for these things in advance by using file_exists and is_readable.
Listing 7. Use file_exists and is_readable
Final do trecho do tut IBM---------------

## rmdir -- Remove um diretório

This functions deletes or empties the directory. Without using recursive functions!

## mkdir -- Criar um diretório

mkdir ("/path/to/my/dir", 0700);
is_file -- Diz se o arquivo é um arquivo comum (não é diretório)
file -- Le um arquivo inteiro para um array

## Receber Conteúdo de URL

<?php // Trazer conteúdo de arquivo ou de página para string
// Define a context for HTTP. $aContext = array(
$cxContext = stream_context_create($aContext);
// Now all file stream functions can use this context. $sFile = file_get_contents("http://www.google.com", False, $cxContext); echo $sFile; ?>

## Recursively find files by filename pattern

http://snippets.dzone.com/posts/show/4147
Scans a directory, and all subdirectories for files, matching a regular expression. Each match is sent to the callback provided as third argument. A simple example:
function my_handler($filename) {
} find_files('c:/', '/php$/', 'my_handler');
And the actual snippet
function find_files($path, $pattern, $callback) {

## Referência

http://phpbrasil.com/articles/print.php/id/310