Opções de autorizações, colocação em cache e metadados
O wrapper de streams do App Engine para o Cloud Storage oferece as seguintes opções para configurar a sua stream:
| Opção | Valores possíveis | Descrição |
|---|---|---|
acl |
Um dos seguintes valores:
|
Para ver descrições do que estas definições fazem no Cloud Storage, consulte o artigo ACLs predefinidas. Se não definir acl, o Cloud Storage define este parâmetro como nulo e usa a ACL de objeto predefinida associada ao contentor que contém o ficheiro. |
Content-Type |
Qualquer tipo MIME válido | Se não especificar um tipo de conteúdo quando carregar um objeto, o sistema do Google Cloud Storage usa o valor predefinido binary/octet-stream quando publica o objeto. |
Content-Disposition |
Qualquer valor de disposição de conteúdo válido | Um cabeçalho que pode definir num objeto que especifica informações de apresentação sobre como os dados do objeto devem ser transmitidos. |
Content-Encoding |
Qualquer algoritmo de compressão válido | O algoritmo de compressão do objeto, como gzip. Tenha em atenção que o Google Cloud Storage não comprime nem descomprime automaticamente objetos com base neste cabeçalho. |
Content-Language |
Qualquer código de idioma ISO 639-1 válido | O código de idioma ISO 639-1 do conteúdo (consulte os códigos para a representação de nomes de idiomas para ver uma lista completa). |
enable_cache |
verdadeiro ou falso (verdadeiro por predefinição) | Os ficheiros lidos do Cloud Storage são colocados em cache na memória (consulte memcache) para melhorar o desempenho. O armazenamento em cache pode ser desativado através da diretiva enable_cache no contexto da stream. |
enable_optimistic_cache |
verdadeiro ou falso (falso por predefinição) | Pode ativar a colocação em cache otimista para ler o objeto de ficheiro a partir da cache sem verificar se o objeto subjacente foi alterado no Cloud Storage desde a última vez que foi colocado em cache. O armazenamento em cache otimista é ideal para cenários de escrita única e leitura múltipla. |
metadata |
Uma matriz associativa, por exemplo: | ['foo' => 'far', 'bar' => 'boo'] Consulte o artigo Ler e escrever metadados personalizados. |
read_cache_expiry_seconds |
O número de segundos durante os quais um objeto permanece válido na cache | Pode alterar o período durante o qual um objeto em cache permanece válido através do elemento read_cache_expiry_seconds directive. Isto especifica o tempo após o qual o objeto é novamente colocado em cache na próxima tentativa de leitura. Por predefinição, esta opção está definida como 1 hora (3600). |
writable_cache_expiry_seconds |
O número de segundos durante os quais o estado de gravação de um contentor é colocado em cache | O wrapper de streams do Cloud Storage coloca em cache o estado gravável dos contentores para melhorar o desempenho. Isto significa que os bits graváveis devolvidos por várias funções relacionadas com stat() podem estar temporariamente dessincronizados quando a ACL do contentor é alterada. Por predefinição, este valor está definido como 10 minutos (600). |
O fragmento seguinte mostra como usar as opções de stream:
No fragmento acima, $options é um conjunto de argumentos que a stream vai usar quando escrever novos objetos, que podem ser definidos como as opções predefinidas através de stream_context_set_default.
Suporte das funções do sistema de ficheiros do PHP 5 no Cloud Storage
O wrapper de streams do App Engine para o Cloud Storage suporta muitas funções nativas do sistema de ficheiros PHP. Algumas funções não são suportadas e outras têm suporte modificado. A tabela seguinte apresenta cada uma destas funções nativas, indicando se a função é suportada ou não. Se uma função for suportada, mas com modificações ou limitações, estas são descritas.
| Função do sistema de ficheiros | Suportado? | Detalhes |
|---|---|---|
| basename: devolve o componente do nome final do caminho. | Compatível. | |
| chgrp: altera o grupo de ficheiros. | Não suportado. | Devolve sempre false. |
| chmod: altera o modo do ficheiro. | Não suportado. | Devolve sempre false. |
| chown: altera o proprietário do ficheiro. | Não suportado. | Devolve sempre false. |
| clearstatcache: limpa a cache do estado do ficheiro. | Compatível. | |
| copy: copia o ficheiro. | Compatível. | |
| dirname: devolve o caminho do diretório principal. | Compatível. | Suportado, mas inclui o prefixo gs://. |
| disk_free_space: devolve o espaço disponível no sistema de ficheiros ou na partição do disco. | Não suportado. | Esta opção está desativada. |
| disk_total_space: devolve o tamanho total de um sistema de ficheiros ou de uma partição do disco. | Não suportado. | Esta opção está desativada. |
| diskfreespace: alias de disk_free_space. | ||
| fclose: fecha um ponteiro de ficheiro aberto. | Compatível. | |
| feof: testa o fim do ficheiro num ponteiro de ficheiro. | Compatível. | |
| fflush: envia a saída para um ficheiro. | Compatível. | Não tem efeito. (Devolve sempre true.) |
| fgetc: recebe um caráter do ponteiro do ficheiro. | Compatível. | |
| fgetcsv: obtém a linha do ponteiro do ficheiro e analisa-a para encontrar campos CSV. | Compatível. | |
| fgets: recebe uma linha de um ponteiro de ficheiro. | Compatível. | |
| fgetss: obtém a linha do ponteiro do ficheiro e remove as etiquetas HTML. | Compatível. | |
| file_exists: verifica se existe um ficheiro ou um diretório. | Compatível. | |
| file_get_contents: lê todo o ficheiro numa string. | Compatível. | |
| file_put_contents: escreve uma string num ficheiro. | Compatível. | |
| file: lê o ficheiro inteiro para uma matriz. | Compatível. | |
| fileatime: obtém a hora do último acesso ao ficheiro. | Não suportado. | Devolve sempre 0. |
| filectime: obtém a hora de alteração do inode do ficheiro. | Não suportado. | Devolve sempre 0. |
| filegroup: recebe o grupo de ficheiros. | Não suportado. | Devolve sempre 0. |
| fileinode: recebe o inode do ficheiro. | Não suportado. | Devolve sempre 0. |
| filemtime: obtém a hora de modificação do ficheiro. | Compatível. | |
| fileowner: recebe o proprietário do ficheiro. | Não suportado. | Devolve sempre 0. |
| fileperms: recebe as autorizações de ficheiros. | Compatível. | O bit de execução está sempre desativado. |
| filesize: obtém o tamanho do ficheiro. | Compatível. | |
| filetype: recebe o tipo de ficheiro. | Compatível. | |
| flock: bloqueio de ficheiros consultivo portátil. | Não suportado. | Devolve sempre false. |
| fopen: abre um ficheiro ou um URL. | Compatível. | Só suporta estes modos: r, rb, rt, w, wb e wt. |
| fpassthru: produz todos os dados restantes num ponteiro de ficheiro. | Compatível. | |
| fputcsv: formata a linha como CSV e escreve no ponteiro do ficheiro. | Compatível. | |
| fputs: alias de fwrite. | ||
| fread: leitura de ficheiros segura para binários. | Compatível. | |
| fscanf: analisa a entrada de um ficheiro de acordo com um formato. | Compatível. | |
| fseek: procura um ponteiro de ficheiro. | Compatível. | Só suporta ficheiros abertos através do modo de leitura. |
| fstat: recebe informações sobre um ficheiro através de um ponteiro de ficheiro aberto. | Compatível. | |
| ftell: devolve a posição atual do ponteiro de leitura/escrita do ficheiro. | Compatível. | |
| ftruncate: trunca um ficheiro para um determinado comprimento. | Não suportado. | Devolve sempre false. |
| fwrite: gravação de ficheiros segura para binários. | Compatível. | |
| glob: encontra nomes de caminhos que correspondem a um padrão. | Compatível. | |
| is_dir: indica se o nome do ficheiro é um diretório. | Compatível. | |
| is_executable: indica se o nome do ficheiro é executável. | Não suportado. | Devolve sempre false. |
| is_file: indica se o nome do ficheiro é um ficheiro normal. | Compatível. | |
| is_link: indica se o nome do ficheiro é um link simbólico. | Não suportado. | Devolve sempre false. |
| is_readable: indica se um ficheiro existe e é legível. | Compatível. | |
| is_uploaded_file: indica se o ficheiro foi carregado através de HTTP POST. | Compatível. | |
| is_writable: indica se o nome do ficheiro é gravável. | Compatível. | O valor é colocado em cache e pode não refletir imediatamente as alterações de autorização. |
| is_writeable: alias de is_writable. | ||
| lchgrp: altera a propriedade do grupo do link simbólico. | Não suportado. | Esta opção está desativada. |
| lchown: altera a propriedade do utilizador do link simbólico. | Não suportado. | Esta opção está desativada. |
| link: cria um hard link. | Não suportado. | Esta opção está desativada. |
| linkinfo: recebe informações sobre um link. | Não suportado. | Devolve sempre -1. |
| lstat: fornece informações sobre um ficheiro ou um link simbólico. | Compatível. | |
| mkdir: cria um diretório. | Compatível. | |
| move_uploaded_file: move um ficheiro carregado para uma nova localização. | Compatível. | |
| parse_ini_file: analisa um ficheiro de configuração. | Compatível. | |
| pathinfo: devolve informações sobre um caminho de ficheiro. | Compatível. | |
| pclose: fecha o ponteiro do ficheiro de processo. | Não suportado. | Esta opção está desativada. |
| popen: abre um ponteiro de ficheiro de processo. | Não suportado. | Esta opção está desativada. |
| readfile: gera um ficheiro. | Compatível. | |
| readlink: devolve o destino de um link simbólico. | Não suportado. | Devolve sempre false. |
| realpath: devolve o caminho absoluto canónico. | Não suportado. | Devolve sempre false. |
| rename: muda o nome de um ficheiro ou de um diretório. | Compatível. | |
| rewind: recua a posição de um ponteiro de ficheiro. | Compatível. | Apenas suportado para o modo de leitura. |
| rmdir: remove o diretório. | Compatível. | |
| set_file_buffer: alias de stream_set_write_buffer. | ||
| stat: fornece informações sobre um ficheiro. | Compatível. | |
| symlink: cria um link simbólico. | Não suportado. | Esta opção está desativada. |
| tempnam: crie um ficheiro com um nome de ficheiro exclusivo. | Compatível. | Consulte estas notas. |
| tmpfile: cria um ficheiro temporário. | Compatível. | Devolve um ficheiro suportado por memória semelhante a php://memory. |
| touch: define a hora de acesso e modificação do ficheiro. | Não suportado. | Devolve sempre false. |
| umask: altera a umask atual. | Compatível. | Não se aplica a ficheiros do Cloud Storage. |
| unlink: elimina um ficheiro. | Compatível. |
Tenha em atenção que as funções de estatísticas de ficheiros na tabela acima (file_exists, filemtime,
filesize, fstat, is_file, is_dir, is_writable e stat) são colocadas em cache
com base em cada pedido. Pode limpar esta cache ligando para clearstatcache.
Além disso, são suportadas as seguintes funções de leitura de diretórios PHP:
| Nome da função |
|---|
opendir |
readdir |
rewinddir |
closedir |
Usar o PHP 5 include e require
Para ajudar a manter a segurança da sua aplicação, a capacidade de include ou require a partir de um ficheiro do Cloud Storage está desativada por predefinição, mas pode ativá-la da seguinte forma:
Para include ou
require código PHP
do Google Cloud Storage na sua aplicação, tem de especificar que contentores
contêm esses ficheiros através da diretiva google_app_engine.allow_include_gs_buckets
no ficheiro php.ini.
Ler e escrever metadados personalizados
Para anexar metadados personalizados a um ficheiro que está a ser escrito no Google Cloud Storage, adicione os metadados a $options antes de criar o contexto de fluxo usado para a chamada file_put_contents.
Neste exemplo, os metadados com o nome foo recebem o valor far e outros com o nome bar recebem o valor boo. O exemplo também define o tipo de conteúdo como text/plain. O contexto da stream é criado com estas informações em $options, conforme mostrado, e o ficheiro é escrito no Cloud Storage através de file_put_contents(), juntamente com os metadados e o tipo de conteúdo:
Para ler os metadados personalizados e o tipo de conteúdo de um ficheiro, chame fopen no ficheiro e, em seguida, use CloudStorageTools::getContentType() para obter o tipo de conteúdo e CloudStorageTools::getMetaData() para obter os metadados.
Os metadados personalizados e o tipo de conteúdo ficam disponíveis assim que tiver o ponteiro do ficheiro devolvido pela chamada fopen.
Leituras de ficheiros em cache
Por predefinição, o wrapper de streams do App Engine para o Cloud Storage armazena em cache as leituras de ficheiros no memcache para melhorar o desempenho nas leituras subsequentes. O armazenamento em cache pode ser desativado através da diretiva enable_cache
no contexto da stream.
Para melhorar ainda mais o desempenho, também pode ativar o armazenamento em cache otimista, que lê o objeto de ficheiro da cache sem verificar se o objeto subjacente foi alterado no Google Cloud Storage desde a última vez que foi colocado em cache, usando a diretiva enable_optimistic_cache (definida como false por predefinição).
O armazenamento em cache otimista é ideal para cenários de escrita única e leitura múltipla.
Também pode alterar o período de tempo
durante o qual um objeto em cache permanece válido através da diretiva read_cache_expiry_seconds,
após o qual o objeto é novamente colocado em cache na próxima tentativa de leitura. Por predefinição, esta opção está definida como 1 hora (3600).
Neste exemplo, o armazenamento em cache otimista está ativado e os objetos de ficheiros estão configurados para serem marcados para novo armazenamento em cache a partir do Google Cloud Storage após 5 minutos.