Uso de Cloud Storage con PHP

En esta parte del tutorial de Bookshelf para PHP se explica cómo almacenar imágenes en Google Cloud Storage.

Esta página forma parte de un tutorial de varias páginas. Para comenzar desde lo básico y consultar las instrucciones de configuración, accede a la aplicación Bookshelf de PHP.

Crear un segmento de Cloud Storage

En las siguientes instrucciones, se explica cómo crear un segmento de Cloud Storage. Los segmentos son los contenedores básicos que contienen los datos en Cloud Storage.

Ponle al segmento el mismo nombre que al ID de tu proyecto.

Para crear un segmento, sigue estas instrucciones:

  1. Invoca el siguiente comando:

    gsutil mb gs://[YOUR-PROJECT-ID]

    Sustituye [YOUR-PROJECT-ID] por el ID del proyecto.

  2. Configura la ACL predeterminada del segmento como public-read, para que los usuarios puedan ver las imágenes que suban:

    gsutil defacl set public-read gs://[YOUR-PROJECT-ID]

    Sustituye [YOUR-PROJECT-ID] por el ID del proyecto.

Establecer configuración

Copia el archivo settings.yml de la parte relativa a los datos estructurados de este tutorial en el directorio getting-started-php/3-cloud-storage.

Instalar dependencias

Introduce el siguiente comando en el directorio 3-cloud-storage.

composer install

Ejecutar la aplicación en la máquina local

  1. Inicia un servidor web local:

    php -S localhost:8000 -t web
    
  2. En el navegador web, introduce la siguiente dirección.

    http://localhost:8000

Ahora puedes navegar por las páginas web de la aplicación, donde podrás agregar libros con imágenes de portada, editar y eliminar libros.

Desplegar la aplicación en el entorno flexible de App Engine

  1. Despliega la aplicación de muestra:

    gcloud app deploy
    
  2. En el navegador web, introduce la siguiente dirección. Sustituye [YOUR_PROJECT_ID] por el ID del proyecto:

    https://[YOUR_PROJECT_ID].appspot.com
    

    Si actualizas la aplicación, podrás desplegar la versión actualizada con el mismo comando utilizado para desplegar la aplicación por primera vez. El nuevo despliegue crea una nueva versión de la aplicación y la establece como la versión predeterminada. Se conservan las versiones anteriores de la aplicación, al igual que las instancias de máquina virtual asociadas. Ten en cuenta que todas estas versiones de la aplicación y las instancias de máquina virtual son recursos facturables.

    Si eliminas las versiones no predeterminadas de la aplicación, puedes reducir los costes.

    Para eliminar una versión de la aplicación, sigue las instrucciones que figuran a continuación:

    1. In the GCP Console, go to the Versions page for App Engine.

      Go to the Versions page

    2. Select the checkbox for the non-default app version you want to delete.
    3. Click Delete to delete the app version.

    Si quieres obtener información completa sobre cómo limpiar los recursos facturables, consulta la sección de limpieza en el último paso de este tutorial.

    Estructura de la aplicación

    Estructura de muestra de datos binarios

    La aplicación usa Cloud Storage para almacenar datos binarios (imágenes en este caso), al mismo tiempo que continúa usando una base de datos estructurada para la información del libro (ya sea Cloud Datastore, Cloud SQL o MongoDB).

    Comprender el código

    La plantilla para publicar los libros en tu base de datos recibe una variable de matriz books. Para cada libro contenido en la matriz, la plantilla muestra la imagen de portada especificada por book.imageUrl. Si el libro no tiene un miembro imageUrl, la plantilla muestra una imagen predeterminada:

    <div class="media-left">
      {% if book.image_url %}
        <img src="{{book.image_url}}">
      {% else %}
        <img src="http://placekitten.com/g/128/192">
      {% endif %}
    </div>

    La plantilla para mostrar un libro individual hace lo mismo:

    <div class="media-left">
      <img class="book-image"
           src="{{ book.image_url ?: 'http://placekitten.com/g/128/192' }}">
    </div>

    El formulario para introducir o editar un libro incluye un campo donde el usuario puede indicar una URL para la imagen de portada:

    <div class="form-group">
      <label for="image">Cover Image</label>
      <input type="file" name="image" id="image" class="form-control"/>
    </div>
    
    <div class="form-group hidden">
      <label for="image_url">Cover Image URL</label>
      <input type="text" name="image_url" id="image_url" value="{{book.image_url}}" class="form-control"/>
    </div>

    Cuando el usuario elimina un libro, el controlador para la ruta POST '/books/{id}/delete' elimina la imagen de portada del libro de Cloud Storage. La variable $storage es una instancia de la clase CloudStorage, que está definida en src/FileSystem/CloudStorage.php.

    if (!empty($book['image_url'])) {
        /** @var CloudStorage $storage */
        $storage = $app['bookshelf.storage'];
        $storage->deleteFile($book['image_url']);
    }
¿Te ha resultado útil esta página? Enviar comentarios: