Ler e escrever ficheiros

No ambiente padrão do PHP 5 do Google App Engine, o sistema de ficheiros local no qual a sua aplicação está implementada não é gravável. Este comportamento garante a segurança e a escalabilidade da sua aplicação.

No entanto, se a sua aplicação precisar de escrever e ler ficheiros no tempo de execução, o ambiente padrão do PHP 5 fornece um wrapper de streams do Google Cloud Storage incorporado que lhe permite usar muitas das funções do sistema de ficheiros do PHP padrão para ler e escrever ficheiros.

Existem duas formas de escrever ficheiros no Google Cloud Storage:

  • Escreva ficheiros a partir da sua app
    • Escrita de ficheiros simples
    • Escrita de ficheiros em stream
  • Permitir que o utilizador carregue ficheiros para o Google Cloud Storage

Escrever ficheiros a partir da sua app

Se escrever ficheiros a partir da sua app, pode escrever o ficheiro inteiro de uma só vez ou pode transmitir a escrita do ficheiro.

O wrapper de stream do App Engine para o Cloud Storage está integrado no runtime e é usado quando fornece um nome de ficheiro que começa com gs://. O contentor requer que o nome do contentor ou do objeto de ficheiro esteja no formato:

gs://bucket_name/desired_object_name

Escrita de ficheiros simples

Para escrever dados no Google Cloud Storage a partir da sua app, usa o método file_put_contents, através de um URL do Cloud Storage válido. Por exemplo:

file_put_contents("gs://${my_bucket}/hello.txt", $newFileContent);

em que my_bucket é um contentor do Google Cloud Storage configurado corretamente.

Em alternativa, se quiser usar opções de streams para fornecer autorizações, opções de colocação em cache e/ou metadados, pode escrever o ficheiro da seguinte forma:

$options = ['gs' => ['Content-Type' => 'text/plain']];
$context = stream_context_create($options);
file_put_contents("gs://${my_bucket}/hello_options.txt", $newFileContent, 0, $context);

Escrita de ficheiros em stream

Em alternativa, pode usar fopen/fwrite para escrever dados de forma de streaming:

$fp = fopen("gs://${my_bucket}/hello_stream.txt", 'w');
fwrite($fp, $newFileContent);
fclose($fp);

Tenha em atenção que, quando usa o streaming, os dados são descarregados para o Google Cloud Storage em partes mais pequenas. Não precisa de saber o comprimento total dos dados a escrever antecipadamente: este é calculado quando o recurso de ficheiro é fechado:

Estas são as formas básicas de escrever ficheiros. Para exemplos de utilização especiais e gestão de ficheiros mais avançada, consulte os tópicos indicados em Onde ir a seguir.

Eliminar ficheiros

Se quiser eliminar o próprio ficheiro, use a função unlink() do PHP.

Carregamentos de utilizadores

Para detalhes sobre esta opção de escrita de ficheiros, consulte o artigo Permitir que os utilizadores carreguem ficheiros

Ler ficheiros

Para obter informações sobre como ler ficheiros do Google Cloud Storage, consulte o artigo Fornecer acesso público a ficheiros

Configuração e requisitos

Tem de ativar o Google Cloud Storage e criar um contentor. Consulte a secção Configuração para ver mais detalhes.

Funções do sistema de ficheiros PHP 5 suportadas

Muitas das funções de ficheiros PHP 5 usadas com frequência são suportadas, juntamente com informações de ficheiros e funções de diretórios. Para ver uma lista completa das funções PHP suportadas, consulte o artigo Suporte de funções do sistema de ficheiros do PHP 5.

Funcionalidades expandidas fornecidas pela API Cloud Storage Tools

O wrapper de streams do Google Cloud Storage permite-lhe usar chamadas do sistema de ficheiros PHP. No entanto, existem funcionalidades expandidas disponíveis que pode precisar para uma utilização ideal do Google Cloud Storage. Estas funcionalidades expandidas são fornecidas na API Cloud Storage Tools:

Esta API fornece um conjunto de funções que suportam a publicação de ficheiros e imagens, juntamente com outras utilidades úteis. Vamos abordar vários destes aspetos nas outras páginas de tópicos.

Existe outra forma de ler e escrever ficheiros?

Uma app PHP 5 do App Engine tem de usar o wrapper de streams do Cloud Storage para escrever ficheiros no tempo de execução. No entanto, se uma app precisar de ler ficheiros e estes ficheiros forem estáticos, pode, opcionalmente, ler ficheiros estáticos carregados com a sua app usando funções do sistema de ficheiros PHP, como file_get_contents.

Por exemplo:

$fileContents = file_get_contents($filePath);

em que o caminho especificado tem de ser um caminho relativo ao script que acede aos mesmos.

Tem de carregar o ficheiro ou os ficheiros para um subdiretório da aplicação quando implementar a sua app no App Engine e tem de configurar o ficheiro app.yaml para que a sua app possa aceder a esses ficheiros. Para ver detalhes completos, consulte o artigo Configuração da aplicação PHP 5 com o app.yaml.

Na configuração app.yaml, repare que, se usar um controlador de ficheiros ou diretórios estático (static_files ou static_dir), tem de especificar application_readable como verdadeiro. Caso contrário, a sua app não vai conseguir ler os ficheiros. No entanto, se os ficheiros forem publicados por um controlador script, isto não é necessário, porque estes ficheiros são legíveis por controladores de scripts por predefinição.

Onde ir a seguir

Leia os seguintes tópicos para ver detalhes sobre a utilização da API Cloud Storage Tools: