Configuración de una aplicación de PHP para Azure App ServiceConfigure a PHP app for Azure App Service

En esta guía, se explica cómo se configuran las aplicaciones web de PHP, los back-ends para dispositivos móviles y las aplicaciones de API de Azure App Service.This guide shows you how to configure your PHP web apps, mobile back ends, and API apps in Azure App Service.

Esta guía incluye conceptos clave e instrucciones para los desarrolladores de PHP que implementan aplicaciones en App Service.This guide provides key concepts and instructions for PHP developers who deploy apps to App Service. Si nunca ha usado Azure App Service, siga primero la guía de inicio rápido de PHP y el tutorial de PHP con MySQL.If you've never used Azure App Service, follow the PHP quickstart and PHP with MySQL tutorial first.

Visualización de la versión de PHPShow PHP version

Para mostrar la versión actual de PHP, ejecute el siguiente comando en Cloud Shell:To show the current PHP version, run the following command in the Cloud Shell:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion

Para mostrar todas las versiones compatibles de PHP, ejecute el siguiente comando en Cloud Shell:To show all supported PHP versions, run the following command in the Cloud Shell:

az webapp list-runtimes | grep php

Para mostrar la versión actual de PHP, ejecute el siguiente comando en Cloud Shell:To show the current PHP version, run the following command in the Cloud Shell:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

Para mostrar todas las versiones compatibles de PHP, ejecute el siguiente comando en Cloud Shell:To show all supported PHP versions, run the following command in the Cloud Shell:

az webapp list-runtimes --linux | grep PHP

Establecer la versión de PHPSet PHP version

Ejecute el siguiente comando en Cloud Shell para establecer la versión 7.4 de PHP:Run the following command in the Cloud Shell to set the PHP version to 7.4:

az webapp config set --name <app-name> --resource-group <resource-group-name> --php-version 7.4

Ejecute el siguiente comando en Cloud Shell para establecer la versión 7.2 de PHP:Run the following command in the Cloud Shell to set the PHP version to 7.2:

az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "PHP|7.2"

Ejecución de ComposerRun Composer

Si quiere que App Service ejecute Composer en el momento de la implementación, la manera más fácil es incluir Composer en el repositorio.If you want App Service to run Composer at deployment time, the easiest way is to include the Composer in your repository.

En una ventana de terminal local, cambie el directorio a la raíz del repositorio y siga las instrucciones que se indican en Descarga de Composer para descargar composer.phar a la raíz del directorio.From a local terminal window, change directory to your repository root, and follow the instructions at download Composer to download composer.phar to the directory root.

Ejecute los siguientes comandos (necesita tener instalado npm):Run the following commands (you need npm installed):

npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt

La raíz del repositorio ahora tiene dos archivos adicionales: .deployment y deploy.sh.Your repository root now has two additional files: .deployment and deploy.sh.

Abra deploy.sh y busque la sección Deployment, que tiene el siguiente aspecto:Open deploy.sh and find the Deployment section, which looks like this:

##################################################################################################################################
# Deployment
# ----------

Agregue la sección de código que necesita para ejecutar la herramienta necesaria al final de la sección Deployment:Add the code section you need to run the required tool at the end of the Deployment section:

# 4. Use composer
echo "$DEPLOYMENT_TARGET"
if [ -e "$DEPLOYMENT_TARGET/composer.json" ]; then
  echo "Found composer.json"
  pushd "$DEPLOYMENT_TARGET"
  php composer.phar install $COMPOSER_ARGS
  exitWithMessageOnError "Composer install failed"
  popd
fi

Confirme todos los cambios e implemente el código mediante Git o realice la implementación desde un archivo ZIP con la automatización de compilaciones habilitada.Commit all your changes and deploy your code using Git, or Zip deploy with build automation enabled. Composer ahora debería estar funcionando como parte de la automatización de la implementación.Composer should now be running as part of deployment automation.

Ejecutar Grunt, Bower o GulpRun Grunt/Bower/Gulp

Si quiere que App Service ejecute herramientas de automatización populares en el momento de la implementación, como Grunt, Bower o Gulp, deberá suministrar un script de implementación personalizado.If you want App Service to run popular automation tools at deployment time, such as Grunt, Bower, or Gulp, you need to supply a custom deployment script. App Service ejecuta este script cuando se implementa con Git o con la implementación desde un archivo ZIP con la automatización de compilaciones habilitada.App Service runs this script when you deploy with Git, or with Zip deployment with build automation enabled.

Para habilitar que el repositorio ejecute estas herramientas, deberá agregarlas a las dependencias en el archivo package.json.To enable your repository to run these tools, you need to add them to the dependencies in package.json. Por ejemplo:For example:

"dependencies": {
  "bower": "^1.7.9",
  "grunt": "^1.0.1",
  "gulp": "^3.9.1",
  ...
}

Desde una ventana de terminal local, cambie el directorio a la raíz del repositorio y ejecute los siguientes comandos (debe tener instalado npm):From a local terminal window, change directory to your repository root and run the following commands (you need npm installed):

npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt

La raíz del repositorio ahora tiene dos archivos adicionales: .deployment y deploy.sh.Your repository root now has two additional files: .deployment and deploy.sh.

Abra deploy.sh y busque la sección Deployment, que tiene el siguiente aspecto:Open deploy.sh and find the Deployment section, which looks like this:

##################################################################################################################################
# Deployment
# ----------

En esta sección termina con la ejecución de npm install --production.This section ends with running npm install --production. Agregue la sección de código que necesita para ejecutar la herramienta necesaria al final de la sección Deployment:Add the code section you need to run the required tool at the end of the Deployment section:

Consulte un ejemplo en la muestra de MEAN.js, donde el script de implementación también ejecuta un comando npm install personalizado.See an example in the MEAN.js sample, where the deployment script also runs a custom npm install command.

BowerBower

Este fragmento de código ejecuta bower install.This snippet runs bower install.

if [ -e "$DEPLOYMENT_TARGET/bower.json" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/bower install
  exitWithMessageOnError "bower failed"
  cd - > /dev/null
fi

GulpGulp

Este fragmento de código ejecuta gulp imagemin.This snippet runs gulp imagemin.

if [ -e "$DEPLOYMENT_TARGET/gulpfile.js" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/gulp imagemin
  exitWithMessageOnError "gulp failed"
  cd - > /dev/null
fi

GruntGrunt

Este fragmento de código ejecuta grunt.This snippet runs grunt.

if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/grunt
  exitWithMessageOnError "Grunt failed"
  cd - > /dev/null
fi

Personalización de la automatización de compilacionesCustomize build automation

Si implementa la aplicación utilizando paquetes Git o zip con la automatización de compilaciones activada, la automatización de compilaciones de App Service se ejecutará en este orden:If you deploy your app using Git or zip packages with build automation turned on, the App Service build automation steps through the following sequence:

  1. Ejecute el script personalizado si lo especifica PRE_BUILD_SCRIPT_PATH.Run custom script if specified by PRE_BUILD_SCRIPT_PATH.
  2. Ejecute php composer.phar install.Run php composer.phar install.
  3. Ejecute el script personalizado si lo especifica POST_BUILD_SCRIPT_PATH.Run custom script if specified by POST_BUILD_SCRIPT_PATH.

PRE_BUILD_COMMAND y POST_BUILD_COMMAND son variables de entorno que, de forma predeterminada, están vacías.PRE_BUILD_COMMAND and POST_BUILD_COMMAND are environment variables that are empty by default. Para ejecutar comandos anteriores a la compilación, defina PRE_BUILD_COMMAND.To run pre-build commands, define PRE_BUILD_COMMAND. Para ejecutar comandos posteriores a la compilación, defina POST_BUILD_COMMAND.To run post-build commands, define POST_BUILD_COMMAND.

En el ejemplo siguiente se especifican las dos variables para una serie de comandos, separados por comas.The following example specifies the two variables to a series of commands, separated by commas.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"

Para obtener más variables de entorno para personalizar la automatización de compilaciones, consulte la configuración de Oryx.For additional environment variables to customize build automation, see Oryx configuration.

Para más información sobre cómo se ejecuta App Service y se compilan aplicaciones de PHP en Linux, consulte la documentación de Oryx sobre cómo se detectan y se compilan las aplicaciones de PHP.For more information on how App Service runs and builds PHP apps in Linux, see Oryx documentation: How PHP apps are detected and built.

Personalización del inicioCustomize start-up

De forma predeterminada, el contenedor PHP integrado ejecuta el servidor Apache.By default, the built-in PHP container runs the Apache server. Al iniciarse, ejecuta apache2ctl -D FOREGROUND".At start-up, it runs apache2ctl -D FOREGROUND". Si lo desea, puede ejecutar otro comando al inicio si ejecuta lo siguiente en Cloud Shell:If you like, you can run a different command at start-up, by running the following command in the Cloud Shell:

az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"

Acceso a variables de entornoAccess environment variables

En App Service, puede establecer la configuración de la aplicación fuera del código de la aplicación.In App Service, you can set app settings outside of your app code. Luego podrá acceder a ellas mediante el patrón estándar de getenv().Then you can access them using the standard getenv() pattern. Por ejemplo, para acceder a una configuración de una aplicación denominada DB_HOST, use el código siguiente:For example, to access an app setting called DB_HOST, use the following code:

getenv("DB_HOST")

Cambio de la raíz del sitioChange site root

La plataforma web que prefiera puede usar un subdirectorio como la raíz del sitio.The web framework of your choice may use a subdirectory as the site root. Por ejemplo, Laravel usa el subdirectorio public/ como la raíz del sitio.For example, Laravel, uses the public/ subdirectory as the site root.

Para personalizar la raíz del sitio, establezca la ruta de acceso de la aplicación virtual para la aplicación mediante el comando az resource update.To customize the site root, set the virtual application path for the app by using the az resource update command. En el ejemplo siguiente se establece la raíz del sitio en el subdirectorio public/ del repositorio.The following example sets the site root to the public/ subdirectory in your repository.

az resource update --name web --resource-group <group-name> --namespace Microsoft.Web --resource-type config --parent sites/<app-name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01

De manera predeterminada, Azure App Service apunta la ruta de acceso de la aplicación virtual raíz ( / ) al directorio raíz de los archivos de la aplicación implementada (sites\wwwroot).By default, Azure App Service points the root virtual application path (/) to the root directory of the deployed application files (sites\wwwroot).

La plataforma web que prefiera puede usar un subdirectorio como la raíz del sitio.The web framework of your choice may use a subdirectory as the site root. Por ejemplo, Laravel usa el subdirectorio public/ como la raíz del sitio.For example, Laravel, uses the public/ subdirectory as the site root.

La imagen de PHP predeterminada para App Service utiliza Apache y no le permite personalizar la raíz del sitio para la aplicación.The default PHP image for App Service uses Apache, and it doesn't let you customize the site root for your app. Para solucionar esta limitación, agregue un archivo .htaccess a la raíz del repositorio con el siguiente contenido:To work around this limitation, add an .htaccess file to your repository root with the following content:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^(.*)
    RewriteRule ^(.*)$ /public/$1 [NC,L,QSA]
</IfModule>

Si prefiere no usar la reescritura de .htaccess, puede implementar la aplicación Laravel con una imagen personalizada de Docker en su lugar.If you would rather not use .htaccess rewrite, you can deploy your Laravel application with a custom Docker image instead.

Detección de sesión de HTTPSDetect HTTPS session

En App Service, la terminación de SSL se produce en los equilibradores de carga de red, por lo que todas las solicitudes HTTPS llegan a su aplicación en forma de solicitudes HTTP sin cifrar.In App Service, SSL termination happens at the network load balancers, so all HTTPS requests reach your app as unencrypted HTTP requests. Si su aplicación lógica necesita comprobar si las solicitudes de usuario están cifradas, inspeccione el encabezado X-Forwarded-Proto.If your app logic needs to check if the user requests are encrypted or not, inspect the X-Forwarded-Proto header.

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}

Los marcos web más usados le permiten acceder a la información de X-Forwarded-* en el patrón de aplicación estándar.Popular web frameworks let you access the X-Forwarded-* information in your standard app pattern. En CodeIgniter, is_https() comprueba el valor de X_FORWARDED_PROTO de forma predeterminada.In CodeIgniter, the is_https() checks the value of X_FORWARDED_PROTO by default.

Personalización de la configuración de php.iniCustomize php.ini settings

Si necesita hacer cambios en su instalación de PHP, puede cambiar cualquiera de las directivas php.ini siguiendo estos pasos.If you need to make changes to your PHP installation, you can change any of the php.ini directives by following these steps.

Nota

La mejor forma de ver la versión de PHP y la configuración de php.ini actual consiste en llamar a phpinfo() en la aplicación.The best way to see the PHP version and the current php.ini configuration is to call phpinfo() in your app.

Personalización de las directivas que no son de PHP_INI_SYSTEMCustomize-non-PHP_INI_SYSTEM directives

Para personalizar las directivas PHP_INI_USER, PHP_INI_PERDIR y PHP_INI_ALL (consulte las directivas de php.ini), agregue un archivo .user.ini al directorio raíz de la aplicación.To customize PHP_INI_USER, PHP_INI_PERDIR, and PHP_INI_ALL directives (see php.ini directives), add a .user.ini file to the root directory of your app.

Agregue la configuración al archivo .user.ini usando la misma sintaxis que usaría en un archivo php.ini.Add configuration settings to the .user.ini file using the same syntax you would use in a php.ini file. Por ejemplo, si quiere desactivar la configuración display_errors y establecer la configuración upload_max_filesize en 10 M, el archivo .user.ini contendría el texto siguiente:For example, if you wanted to turn on the display_errors setting and set upload_max_filesize setting to 10M, your .user.ini file would contain this text:

 ; Example Settings
 display_errors=On
 upload_max_filesize=10M

 ; Write errors to d:\home\LogFiles\php_errors.log
 ; log_errors=On

Vuelva a implementar la aplicación con los cambios y reiníciela.Redeploy your app with the changes and restart it.

Como alternativa al uso del archivo .user.ini, puede usar ini_set() en la aplicación para personalizar estas directivas que no son de PHP_INI_SYSTEM.As an alternative to using a .user.ini file, you can use ini_set() in your app to customize these non-PHP_INI_SYSTEM directives.

Para personalizar las directivas PHP_INI_USER, PHP_INI_PERDIR y PHP_INI_ALL (consulte las directivas de php.ini), agregue un archivo .htaccess al directorio raíz de la aplicación.To customize PHP_INI_USER, PHP_INI_PERDIR, and PHP_INI_ALL directives (see php.ini directives), add an .htaccess file to the root directory of your app.

En el archivo .htaccess, agregue las directivas mediante la sintaxis php_value <directive-name> <value>.In the .htaccess file, add the directives using the php_value <directive-name> <value> syntax. Por ejemplo:For example:

php_value upload_max_filesize 1000M
php_value post_max_size 2000M
php_value memory_limit 3000M
php_value max_execution_time 180
php_value max_input_time 180
php_value display_errors On
php_value upload_max_filesize 10M

Vuelva a implementar la aplicación con los cambios y reiníciela.Redeploy your app with the changes and restart it. Si la implementa con Kudu (por ejemplo, mediante Git), se reinicia automáticamente después de la implementación.If you deploy it with Kudu (for example, using Git), it's automatically restarted after deployment.

Como alternativa al uso de .htaccess, puede usar ini_set() en la aplicación para personalizar estas directivas que no son de PHP_INI_SYSTEM.As an alternative to using .htaccess, you can use ini_set() in your app to customize these non-PHP_INI_SYSTEM directives.

Personalización de las directivas de PHP_INI_SYSTEMCustomize PHP_INI_SYSTEM directives

Para personalizar las directivas de PHP_INI_SYSTEM (consulte directivas de php.ini), no puede usar el enfoque .htaccess.To customize PHP_INI_SYSTEM directives (see php.ini directives), you can't use the .htaccess approach. App Service proporciona un mecanismo diferente mediante la configuración de la aplicación PHP_INI_SCAN_DIR.App Service provides a separate mechanism using the PHP_INI_SCAN_DIR app setting.

En primer lugar, ejecute el siguiente comando en Cloud Shell para agregar una configuración de aplicación llamada PHP_INI_SCAN_DIR:First, run the following command in the Cloud Shell to add an app setting called PHP_INI_SCAN_DIR:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PHP_INI_SCAN_DIR="d:\home\site\ini"

Vaya a la consola de Kudu (https://<app-name>.scm.azurewebsites.net/DebugConsole) y navegue a d:\home\site.Navigate to the Kudu console (https://<app-name>.scm.azurewebsites.net/DebugConsole) and navigate to d:\home\site.

Cree un directorio en d:\home\site llamado ini, después cree un archivo .ini en el directorio d:\home\site\ini (por ejemplo, settings.ini) con las directivas que quiera personalizar.Create a directory in d:\home\site called ini, then create an .ini file in the d:\home\site\ini directory (for example, settings.ini) with the directives you want to customize. Utilice la misma sintaxis que usaría en un archivo php.ini.Use the same syntax you would use in a php.ini file.

Por ejemplo, para cambiar el valor de expose_php, ejecute los siguientes comandos:For example, to change the value of expose_php run the following commands:

cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini

Para que los cambios surtan efecto, reinicie la aplicación.For the changes to take effect, restart the app.

Para personalizar las directivas de PHP_INI_SYSTEM (consulte directivas de php.ini), no puede usar el enfoque .htaccess.To customize PHP_INI_SYSTEM directives (see php.ini directives), you can't use the .htaccess approach. App Service proporciona un mecanismo diferente mediante la configuración de la aplicación PHP_INI_SCAN_DIR.App Service provides a separate mechanism using the PHP_INI_SCAN_DIR app setting.

En primer lugar, ejecute el siguiente comando en Cloud Shell para agregar una configuración de aplicación llamada PHP_INI_SCAN_DIR:First, run the following command in the Cloud Shell to add an app setting called PHP_INI_SCAN_DIR:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PHP_INI_SCAN_DIR="/usr/local/etc/php/conf.d:/home/site/ini"

/usr/local/etc/php/conf.d es el directorio predeterminado donde se encuentra php.ini./usr/local/etc/php/conf.d is the default directory where php.ini exists. /home/site/ini es el directorio personalizado en el que agregará un archivo personalizado .ini./home/site/ini is the custom directory in which you'll add a custom .ini file. Separe los valores con un :.You separate the values with a :.

Vaya a la sesión SSH web con el contenedor Linux (https://<app-name>.scm.azurewebsites.net/webssh/host).Navigate to the web SSH session with your Linux container (https://<app-name>.scm.azurewebsites.net/webssh/host).

Cree un directorio en /home/site llamado ini, después cree un archivo .ini en el directorio /home/site/ini (por ejemplo, settings.ini) con las directivas que quiera personalizar.Create a directory in /home/site called ini, then create an .ini file in the /home/site/ini directory (for example, settings.ini) with the directives you want to customize. Utilice la misma sintaxis que usaría en un archivo php.ini.Use the same syntax you would use in a php.ini file.

Sugerencia

En los contenedores Linux incorporados en App Service, /home se utiliza como almacenamiento compartido persistente.In the built-in Linux containers in App Service, /home is used as persisted shared storage.

Por ejemplo, para cambiar el valor de expose_php, ejecute los siguientes comandos:For example, to change the value of expose_php run the following commands:

cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini

Para que los cambios surtan efecto, reinicie la aplicación.For the changes to take effect, restart the app.

Habilitación de las extensiones de PHPEnable PHP extensions

Las instalaciones de PHP integradas contienen las extensiones más usadas.The built-in PHP installations contain the most commonly used extensions. Puede habilitar extensiones adicionales en la misma forma que personaliza las directivas de php.ini.You can enable additional extensions in the same way that you customize php.ini directives.

Nota

La mejor forma de ver la versión de PHP y la configuración de php.ini actual consiste en llamar a phpinfo() en la aplicación.The best way to see the PHP version and the current php.ini configuration is to call phpinfo() in your app.

Para habilitar extensiones adicionales, siga los pasos que se detallan a continuación:To enable additional extensions, by following these steps:

Agregue un directorio bin al directorio raíz de la aplicación y coloque los archivos de extensión .dll en él (por ejemplo, mongodb.dll).Add a bin directory to the root directory of your app and put the .dll extension files in it (for example, mongodb.dll). Asegúrese de que las extensiones sean compatibles con la versión de PHP en Azure y que sean compatibles con VC9 y no seguras para subprocesos (nts).Make sure that the extensions are compatible with the PHP version in Azure and are VC9 and non-thread-safe (nts) compatible.

Implemente los cambiosDeploy your changes.

Siga los pasos que se indican en Personalización de las directivas de PHP_INI_SYSTEM, agregue las extensiones al archivo custom.ini con las directivas extension o zend_extension.Follow the steps in Customize PHP_INI_SYSTEM directives, add the extensions into the custom .ini file with the extension or zend_extension directives.

extension=d:\home\site\wwwroot\bin\mongodb.dll
zend_extension=d:\home\site\wwwroot\bin\xdebug.dll

Para que los cambios surtan efecto, reinicie la aplicación.For the changes to take effect, restart the app.

Las instalaciones de PHP integradas contienen las extensiones más usadas.The built-in PHP installations contain the most commonly used extensions. Puede habilitar extensiones adicionales en la misma forma que personaliza las directivas de php.ini.You can enable additional extensions in the same way that you customize php.ini directives.

Nota

La mejor forma de ver la versión de PHP y la configuración de php.ini actual consiste en llamar a phpinfo() en la aplicación.The best way to see the PHP version and the current php.ini configuration is to call phpinfo() in your app.

Para habilitar extensiones adicionales, siga los pasos que se detallan a continuación:To enable additional extensions, by following these steps:

Agregue un directorio bin al directorio raíz de la aplicación y coloque los archivos de extensión .so en él (por ejemplo, mongodb.so).Add a bin directory to the root directory of your app and put the .so extension files in it (for example, mongodb.so). Asegúrese de que las extensiones sean compatibles con la versión de PHP en Azure y que sean compatibles con VC9 y no seguras para subprocesos (nts).Make sure that the extensions are compatible with the PHP version in Azure and are VC9 and non-thread-safe (nts) compatible.

Implemente los cambiosDeploy your changes.

Siga los pasos que se indican en Personalización de las directivas de PHP_INI_SYSTEM, agregue las extensiones al archivo custom.ini con las directivas extension o zend_extension.Follow the steps in Customize PHP_INI_SYSTEM directives, add the extensions into the custom .ini file with the extension or zend_extension directives.

extension=/home/site/wwwroot/bin/mongodb.so
zend_extension=/home/site/wwwroot/bin/xdebug.so

Para que los cambios surtan efecto, reinicie la aplicación.For the changes to take effect, restart the app.

Acceso a los registros de diagnósticoAccess diagnostic logs

Use la utilidad error_log() estándar para que los registros de diagnóstico se muestren en Azure App Service.Use the standard error_log() utility to make your diagnostic logs to show up in Azure App Service.

Para acceder a los registros de la consola generados desde el código de la aplicación en App Service, active el registro de diagnósticos, para lo que debe ejecutar el siguiente comando en Cloud Shell:To access the console logs generated from inside your application code in App Service, turn on diagnostics logging by running the following command in the Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --application-logging true --level Verbose

Los valores posibles de --level son: Error, Warning, Info y Verbose.Possible values for --level are: Error, Warning, Info, and Verbose. Todos los niveles incluyen el nivel anterior.Each subsequent level includes the previous level. Por ejemplo: Error incluye solo los mensajes de error, mientras que Verbose incluye todos los mensajes.For example: Error includes only error messages, and Verbose includes all messages.

Una vez que se activa el registro de contenedor, ejecute el siguiente comando para ver la transmisión del registro:Once diagnostic logging is turned on, run the following command to see the log stream:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Si no ve los registros de la consola de inmediato, vuelve a comprobarlo en 30 segundos.If you don't see console logs immediately, check again in 30 seconds.

Nota

También puede inspeccionar los archivos de registro desde el explorador en https://<app-name>.scm.azurewebsites.net/api/logs/docker.You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Para detener el streaming del registro en cualquier momento, escriba Ctrl+C.To stop log streaming at any time, type Ctrl+C.

Puede acceder a los registros de consola generados desde dentro del contenedor.You can access the console logs generated from inside the container.

En primer lugar, active el registro de contenedores mediante la ejecución del siguiente comando:First, turn on container logging by running the following command:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

Reemplace <app-name> y <resource-group-name> por los nombres adecuados para su aplicación web.Replace <app-name> and <resource-group-name> with the names appropriate for your web app.

Una vez que se active el registro de contenedor, ejecute el siguiente comando para ver el flujo del registro:Once container logging is turned on, run the following command to see the log stream:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

Si no ve los registros de la consola de inmediato, vuelve a comprobarlo en 30 segundos.If you don't see console logs immediately, check again in 30 seconds.

Para detener el streaming de registro en cualquier momento, escriba Ctrl+C.To stop log streaming at any time, type Ctrl+C.

Los archivos de registro también se pueden inspeccionar en un explorador en https://<app-name>.scm.azurewebsites.net/api/logs/docker.You can also inspect the log files in a browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Solución de problemasTroubleshooting

Cuando una aplicación de PHP en funcionamiento se comporta de manera diferente en App Service o genera errores, intente lo siguiente:When a working PHP app behaves differently in App Service or has errors, try the following:

  • Acceso a la secuencia de registros.Access the log stream.
  • Pruebe la aplicación localmente en modo de producción.Test the app locally in production mode. App Service ejecuta la aplicación en el modo de producción, por lo que deberá asegurarse de que el proyecto funciona según lo previsto en modo de producción localmente.App Service runs your app in production mode, so you need to make sure that your project works as expected in production mode locally. Por ejemplo:For example:
    • En función de su archivo composer.json, pueden instalarse distintos paquetes para el modo de producción (require frente a require-dev).Depending on your composer.json, different packages may be installed for production mode (require vs. require-dev).
    • Algunas plataformas web pueden implementar archivos estáticos de forma diferente en modo de producción.Certain web frameworks may deploy static files differently in production mode.
    • Algunas plataformas web pueden usar scripts de inicio personalizados cuando se ejecutan en modo de producción.Certain web frameworks may use custom startup scripts when running in production mode.
  • Ejecute la aplicación en App Service en el modo de depuración.Run your app in App Service in debug mode. Por ejemplo, en Laravel, puede configurar la aplicación para que genere mensajes de depuración en producción al configurar el ajuste de la aplicación APP_DEBUG en true.For example, in Laravel, you can configure your app to output debug messages in production by setting the APP_DEBUG app setting to true.

robots933456 en registrosrobots933456 in logs

Puede ver el mensaje siguiente en los registros del contenedor:You may see the following message in the container logs:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Puede omitir este mensaje sin problemas.You can safely ignore this message. /robots933456.txt es una ruta de acceso de la dirección URL ficticia que utiliza App Service para comprobar si el contenedor es capaz de atender las solicitudes./robots933456.txt is a dummy URL path that App Service uses to check if the container is capable of serving requests. Una respuesta 404 simplemente indica que la ruta de acceso no existe, pero permite a App Service saber que el contenedor está en buen estado y listo para responder a las solicitudes.A 404 response simply indicates that the path doesn't exist, but it lets App Service know that the container is healthy and ready to respond to requests.

Pasos siguientesNext steps