Lire et écrire des fichiers

Dans l'environnement standard PHP 5 de Google App Engine, le système de fichiers local dans lequel votre application est déployée n'est pas accessible en écriture. Ce comportement permet de garantir la sécurité et l'évolutivité de l'application.

Toutefois, si votre application doit écrire et lire des fichiers au moment de l'exécution, l'environnement standard PHP 5 fournit un wrapper de flux Google Cloud Storage intégré qui vous permet d'utiliser de nombreuses fonctions standards du système de fichiers PHP pour lire et écrire des fichiers.

Deux options s'offrent à vous pour écrire des fichiers dans Google Cloud Storage :

  • Écrire des fichiers depuis votre application
    • Écriture simple de fichiers
    • Écriture de fichiers par flux
  • Laisser l'utilisateur importer des fichiers dans Google Cloud Storage

Écrire des fichiers depuis l'application

Si vous écrivez des fichiers depuis l'application, vous pouvez les écrire intégralement en une fois ou les diffuser.

Le wrapper de flux App Engine pour Cloud Storage est intégré à l'environnement d'exécution et est utilisé lorsque vous fournissez un nom de fichier commençant par gs://. Le wrapper nécessite que le nom du bucket ou du fichier objet se présente sous la forme suivante :

gs://bucket_name/desired_object_name

Écriture simple de fichiers

Vous pouvez écrire des données dans Google Cloud Storage depuis l'application à l'aide de file_put_contents en utilisant une URL de stockage valide dans le cloud. Exemple :

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

my_bucket est un bucket Google Cloud Storage correctement configuré.

Si vous souhaitez utiliser les options de diffusion pour définir des autorisations, la mise en cache et/ou des métadonnées, vous pouvez écrire le fichier comme suit :

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

Écriture de fichiers par flux

Vous pouvez également utiliser fopen/fwrite pour écrire des données sous forme de flux :

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

Notez que lorsque vous utilisez des flux, les données sont vidées sur Google Cloud Storage en segments plus petits. Vous n'avez pas besoin de connaître la longueur totale des données à écrire dès le départ. Elle est calculée lors de la fermeture du fichier :

Ce sont les méthodes les plus simples pour écrire des fichiers. Pour passer en revue des cas d'utilisation particuliers et des options de gestion de fichiers plus avancées, consultez les sujets répertoriés dans la section Étapes suivantes.

Supprimer des fichiers

Si vous voulez supprimer le fichier lui-même, utilisez la fonction PHP unlink().

Importations utilisateur

Pour en savoir plus sur cette option d'écriture de fichiers, consultez Autoriser les utilisateurs à transférer des fichiers.

Lire des fichiers

Pour en savoir plus sur la lecture des fichiers depuis Google Cloud Storage, consultez Fournir un accès public aux fichiers.

Configuration et prérequis

Vous devez activer Google Cloud Storage et créer un bucket. Pour en savoir plus, consultez la page Configuration.

Fonctions du système de fichiers PHP 5 compatibles

La plupart des fonctions couramment utilisées du système de fichiers PHP 5 sont acceptées, ainsi que les informations sur les fichiers et les fonctions de répertoire. Pour obtenir la liste complète des fonctions PHP compatibles, consultez la section Compatibilité des fonctions du système de fichiers PHP 5.

Fonctionnalités avancées fournies par l'API Cloud Storage Tools

Le wrapper de flux Google Cloud Storage vous permet d'utiliser les appels du système de fichiers PHP. Cependant, vous avez à votre disposition des fonctionnalités avancées dont vous pourriez avoir besoin pour utiliser Google Cloud Storage de manière optimale. Ces fonctionnalités avancées sont fournies dans l'API Cloud Storage Tools :

Cette API fournit un ensemble de fonctions compatibles avec la diffusion de fichiers et d'images, ainsi que d'autres utilitaires utiles. Nous en présentons plusieurs dans d'autres articles.

Existe-t-il un autre moyen de lire et d'écrire des fichiers ?

Une application PHP 5 App Engine doit utiliser le wrapper de flux Cloud Storage pour écrire des fichiers au moment de l'exécution. Néanmoins, si une application doit lire des fichiers statiques, vous pouvez éventuellement lire les fichiers statiques transférés avec l'application à l'aide des fonctions du système de fichiers PHP, telles que file_get_contents.

Exemple :

$fileContents = file_get_contents($filePath);

où le chemin d'accès spécifié doit être un chemin relatif au script qui y accède.

Lorsque vous déployez votre application sur App Engine, vous devez importer le ou les fichiers dans un sous-répertoire de l'application. Vous devez également configurer le fichier app.yaml pour que votre application puisse accéder à ces fichiers. Pour en savoir plus, consultez la page Configurer une application PHP 5 avec app.yaml.

Dans la configuration du fichier app.yaml, notez que vous devez définir le paramètre application_readable sur "true" si vous utilisez un gestionnaire de répertoires ou de fichiers statiques (static_files ou static_dir). Sinon, l'application ne pourra pas lire les fichiers. Cependant, si ces fichiers sont diffusés par un gestionnaire script, cette opération n'est pas nécessaire, car ceux-ci sont lisibles par les gestionnaires de script par défaut.

Étapes suivantes

Consultez les rubriques suivantes pour en savoir plus sur l'utilisation de l'API Cloud Storage Tools :

  • Configuration : instructions de configuration rapide.
  • Fournir un accès public aux fichiers : montre comment permettre aux utilisateurs de télécharger des fichiers via un navigateur.
  • Autoriser les utilisateurs à transférer des fichiers : montre comment transférer directement des fichiers via un navigateur, en contournant l'application.
  • Utiliser des fichiers image : montre les meilleurs moyens de gérer et de diffuser des images.
  • La page Gestion de fichiers avancée porte sur les éléments suivants :
    • Options de diffusion des autorisations, de la mise en cache et des métadonnées
    • Compatibilité avec les fonctions du système de fichiers PHP
    • Utiliser les fonctions PHP include et require
    • Lire et écrire des métadonnées personnalisées
    • Lire et écrire des fichiers mis en cache