Editando php ini. ¿Cómo cambiar una configuración en la configuración de PHP? Quizás una solución que utilice .htaccess le convenga

Algunas tareas requieren el uso planificadorprograma especial, que lanza ciertos scripts, programas, etc. en un momento determinado. En la mayoría de los casos esto cron. Puede que haya otros, pero no sé nada sobre ellos. En este artículo te contaré algunas de las características. Configuración de cron usando el ejemplo de ejecutar un script PHP.

Trabajos cron y ejecución de un script PHP

La entrada (tarea) en sí en Cron (normalmente por nombre de carpeta crontab o crontabs) consiste en marca de tiempo Y equipos. Marca de tiempo La tarea incluye los siguientes valores: día de la semana, mes, día, hora y minuto, y equipo (a menudo llamado: ejercicio) , al menos en el caso de ejecutar un script, puede consistir en un intérprete y el propio script, por ejemplo:

`/usr/bin/cuál php` /home/l/login/public_html/script.php

EN en este caso: `/usr/bin/cuál php` - camino absoluto al intérprete PHP, y /home/l/login/public_html/script.php es la ruta absoluta al script PHP. Cabe señalar que la ruta al intérprete y los scripts pueden diferir para usted, ya que dependen de la configuración del servidor web.

Configurar Cron a través de PU

La mayoría de los proveedores de hosting ofrecen a los clientes ofertas especiales Panel de control(PU), que facilita la configuración y el trabajo con entradas Cron. Así es como se ve ejecutar el script php cron_admitad.php en el programador de SpaceWeb.

Tenga en cuenta que la ruta al intérprete no se especifica aquí (más sobre esto un poco más adelante). También cabe destacar el uso del símbolo " tilde" (~) como alias " directorio de inicio» (teniendo en cuenta el ejemplo dado: /home/l/login). En pocas palabras, este es el directorio al que, en condiciones normales, se accede inicialmente a través de FTP.

Ruta al intérprete en el script php.

La mayoría de los problemas tienen múltiples soluciones. A menudo es difícil decir cuál es el óptimo, pero ese no es el punto.

Símbolo " enrejado" (#) es un comentario en PHP, pero la secuencia #! (Inglés) línea de explosión, hash-bang o el asunto) tiene un significado especial: especifica la ruta al intérprete del script.

El hecho es que en los sistemas operativos tipo UNIX los scripts se pueden crear en diferentes idiomas: PHP, Perl, Python, etc. Cuando el servidor web ejecuta el script, se basa en la extensión del archivo (por ejemplo: .php, .phtm, phtml, etc. son extensiones comunes para el intérprete de PHP). Los sistemas operativos tipo UNIX, por regla general, no se centran en la extensión del archivo; a menudo, el archivo simplemente no la tiene. El sistema lee la primera línea y busca un controlador de script.

En el script PHP mencionado anteriormente, la primera línea que tengo es:

#!/usr/local/bin/php

Nuevamente, la ruta a su intérprete PHP puede ser diferente de ruta especificada en el ejemplo, porque todo depende de la configuración del servidor web.

Rutas a archivos en un script ejecutado a través de Cron

Otro matiz importante. Si su secuencia de comandos utiliza funciones require() , include() , fopen() , etc. que implican acceder a archivos de terceros en el servidor web, debe especificar una ruta absoluta, por ejemplo:

/home/s/shop4mru/public_html/content/data/coupons.db

Nuevamente, la ruta al archivo cupones.db puede diferir de la ruta especificada en el ejemplo, ya que todo depende de la configuración del servidor web.

En general, también puedes utilizar una ruta relativa. Para hacer esto, use la función php chdir(), que cambia el actual directorio PHP, al especificado como su parámetro.

Para ser honesto, no he utilizado esta función, pero según tengo entendido, la situación es la siguiente. Antes de contactar archivo de terceros en el servidor web, inserte algo como el siguiente código:

Chdir("public_html"); // cambiar al directorio: /home/s/shop4mru/public_html

Por lo tanto, el archivo, teniendo en cuenta el ejemplo dado, estará disponible a través de ruta relativa:

./content/data/cupones.db

El punto al principio significa el directorio actual modificado.

Resumamos la configuración de Cron

cron (a menudo llamado por el nombre de la carpeta crontab o crontabs) - un programa planificador iniciado en el servidor web del proveedor de alojamiento, que ejecuta scripts, programas y otros comandos en un momento determinado. La tarea en sí es un registro que consta de una marca de tiempo y un comando. Un punto importante aquí hay una indicación los caminos correctos al intérprete de script y a los archivos incluidos en él.

a las 8:00 Editar mensaje 9 comentarios

Cron es un programador de tareas que se ejecuta en alojamiento Unix\Linux. Le permite realizar automáticamente ciertas acciones en el servidor (iniciar programas, scripts, etc.), con tiempo dado o frecuencia.

Configurar correctamente el programador de trabajos Cron

Los trabajos para Cron se pueden describir de la siguiente manera: son varias líneas (una línea, un trabajo), que indican la frecuencia de inicio y el comando (lo que significa lo que realmente se debe ejecutar):

30 3 * * 2 /tudirectorio/myscript.pl

Esquemáticamente:

Minutos Horas DíaMes Mes DíaComando Semana

minutos- establecido por un número del 0 al 59

Mirar- establecido por un número del 0 al 23

Día del mes- establecido por un número del 1 al 31

Mes- establecido por un número del 1 al 12

Día de la semana- 1 - lunes, 2 - martes, 3 - miércoles, 4 - jueves, 5 - viernes, 6 - sábado, 7 - domingo

Por lo tanto, en nuestro ejemplo (30 3 * * 2 /yourdirectory/myscript.pl) back significa que debe ejecutar el archivo /yourdirectory/myscript.pl todos los martes a las 3:30 am

Además en cada uno de los campos podremos utilizar:

Escritura separada por comas: 2,5,16 - si escribe esto en el campo Horas, la tarea se ejecutará a las 2 am, 5 am y 4 pm.

Intervalo: 5-9 - si escribe esto en el campo Minutos, la tarea se ejecutará cada minuto en el período de 5 a 9 minutos.

Frecuencia adicional: /4 - si escribe esto en el campo de horas, significará que el lanzamiento se realizará cada 4 horas.

¡Importante! Asterisco (*) significa todo valores posibles! Así, un webmaster inexperto que decide que para ejecutar una tarea el día 1 de cada mes basta con escribir * * 1 * * /yourdirectory/myscript.pl se topa con el hecho de que la tarea se ejecutará cada minuto, cada hora.

¿Cómo y dónde ingresar a los trabajos Cron?

La primera forma de trabajar con Cron es a través de su panel de control de hosting. pero en diferentes paneles La configuración y gestión se realizan de diferentes formas:

cPanel: Panel de control -> Trabajos cron

Administrador de ISP: Panel de control -> Programador (Cron)

Parallels Plesk: Panel de control -> Tareas programadas

Si su proveedor de hosting no tiene la capacidad de trabajar con trabajos a través del panel de control, entonces todo el trabajo con Cron generalmente se realiza a través del protocolo SSH. Aquí todo es simple: conéctese al servidor a través de SSH e ingrese comandos. Para conectarse al servidor utilice programa gratuito Masilla ( cómo configurar), y los comandos se ingresan en la línea de comando.

Para comenzar, ingrese el comando

Después de esto, lo más probable es que lo transfieran a editor de texto vi (y diferentes proveedores puede haber diferentes editores). vi es un editor bastante complejo, por lo que le recomendamos que intente ingresar la línea

Si se inicia un editor más ligero, entonces todo está bien, pero si su proveedor de alojamiento no lo admite, entonces Google te ayudará a resolverlo con vi. Sólo resumiremos brevemente los puntos principales:

Ingresando texto- presione la tecla i y el editor cambiará al modo de entrada de texto;

salir del modo de entrada de texto- ESC

Eliminar personaje- x (si está en modo de entrada de prueba, para eliminar un carácter, primero presione Esc y luego x);

¡Importante! Al ingresar trabajos para Cron, debe presionar Enter después de cada línea, incluso si esta es la única línea.

Para ver trabajos Cron existentes, ingrese crontab -l

Trabajos cron con ejemplos útiles

Consulte las reglas para crear trabajos Cron. Ejecute una tarea cada 2 horas a 0 minutos (todos los días, todos los meses)

0 */2 * * * /tudirectorio/myscript.pl

Ejecute la tarea cada vez que reinicie el servidor

@reboot/tudirectorio/myscript.pl

Ejecute la tarea los miércoles a las 3:20 a. m. (todos los días, todos los meses)

20 3 * * 3 /tudirectorio/myscript.pl
1 0 14 3 * /tudirectorio/myscript.pl

Ejecute la tarea mensualmente el día 1 a las 3:15 am (todos los meses)

15 3 1 * * /tudirectorio/myscript.pl

Ejecute archivos PHP según una programación usando Cron

Para ejecutar scripts PHP a través de Cron, puede utilizar un intérprete especial. Desafortunadamente, no podemos darle instrucciones sobre cómo usarlo, porque... Diferentes proveedores pueden utilizar software diferente. Por lo tanto, muchos webmasters ejecutan archivos PHP usando WGET, para esto usamos la siguiente entrada de crontab:

30 3 * * 2 raíz wget -O - -q -t 1 http://mysite.com/file.php

"-O -" significa que Cron no creará archivos extra, pero funcionará a través de la consola. Esto le permite evitar saturar el servidor.

"-q" desactiva la impresión de la operación en la pantalla

"-t 1" sólo permite un intento de conexión.

http://mysite.com/file.php: ruta a su archivo PHP (no es necesario especificar una ruta absoluta).

¡Importante! Si pasa parámetros usando este archivo PHP, hay ocasiones en las que WGET no los procesa correctamente. En este caso, recomendamos incluir la dirección del archivo PHP entre comillas simples:

30 3 * * 2 raíz wget -O - -q -t 1 "http://mysite.com/file.php"

Además, hay otra forma de empezar:

30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://misitio.com/file.php

Pero en este caso, necesita conocer la ruta a la carpeta wget en su servidor (más a menudo /usr/bin/wget o /usr/local/bin/wget).

Reciba un informe de trabajo de Cron por correo electrónico

Cron se puede configurar para correo electrónico Llegaron mensajes con los resultados de la ejecución de tareas. Esta función también puede resultar útil para notificar en caso de error. Para recibir un informe por correo electrónico, debe editar crontab (antes de las tareas) y escribir la siguiente línea:

Dónde [correo electrónico protegido]- este es el correo electrónico al que se enviarán las cartas. También puedes agregar varias direcciones, separadas por comas.

Hay una cosa más: también recibirás el resultado del script por correo electrónico. por ejemplo, si el script escribe algún tipo de inscripción en la pantalla, la misma inscripción se enviará a su correo electrónico junto con el informe. Si esto le molesta, agregue la línea > /dev/null 2>&1 al final de la tarea.

30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://mysite.com/file.php > /dev/null 2>&1
8 de abril de 2015 a las 11:57

Ejecutando un script PHP por programación cron. Cuando no todo está tan claro

  • PHP
  • Desarrollo de sitios web

En este artículo hablaré sobre algunas de las sutilezas. iniciar php- scripts en sitios de alojamiento, cuyo desconocimiento puede estropear muchos nervios tanto a los programadores novatos como a los profesionales intermedios.
Razón para escribir este artículo: problemas al ejecutar scripts en hostings con diferentes configuraciones. Y dado que la configuración puede variar, la información proporcionada para casos generales puede ser inapropiado y engañoso.

Un poco de teoría en estos enlaces: y, para aquellos que quieran refrescar la memoria.

Caso uno

En la configuración Sistema operativo no se especifican rutas predeterminadas. Como consecuencia siguiente comando en cron no se ejecutará.

PHP /var/www/LOGIN/data/www/SITE/cron.php
El comando correcto sería la segunda opción, donde escribiremos la ruta completa al intérprete de php.

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php
Hay varias otras formas de empezar. secuencia de comandos php y los descritos. Lo que será interesante aquí es que el script php se inicia como un archivo con comandos para la consola, y aquí puedes escribir un montón de comandos y describir todo tipo de opciones para todos los gustos. El código se ve así.

#!/usr/bin/php
El comando que se ejecutará en cron especifica la ruta al script y nada más. El script contiene símbolos #! y luego simplemente escribimos los comandos que necesitamos en bash.

Caso dos

La ejecución del script cuando se solicita desde el navegador da como resultado que la página se muestre en el navegador. Y cuando se ejecuta el script a través de cron, el resultado de la salida del texto de la página es la línea de comando. Puede haber varias opciones aquí. El sistema se puede configurar para guardar la salida en la consola como un archivo. Además, es posible que este archivo no esté ubicado en el lugar más habitual. Poco a poco, esto puede llenar todo el espacio en disco. A menudo, a un sitio se le asigna un espacio de 1 Gigabyte, 500 megabytes. E incluso había hostings de 50 y 10 megas para el sitio.

Alternativamente, la salida se puede redirigir a buzón, que un proveedor de alojamiento atento le presentó discretamente y registró en la configuración del alojamiento como correo electrónico predeterminado. Cada vez que se ejecuta el script, todo el texto enviado a la consola tendrá el formato de letra. Los problemas pueden comenzar inesperadamente. Si se ejecuta un trabajo cron con frecuencia y el correo electrónico de alojamiento tiene un límite en la cantidad de correos electrónicos por día, el correo electrónico simplemente fallará (el proveedor lo bloqueará como posible spammer). Y como consecuencias desagradables, recibirá una negativa a registrar usuarios, notificar a los usuarios, etc., que está vinculada al correo.

La solución es tan antigua como el tiempo. Es necesario redirigir la salida de la consola al vacío. Esto se hace agregando el comando al final del comando cron.

>>desarrollador/nulo 2>&1
A veces, los administradores de alojamiento se encargan de instalarlos discretamente para el usuario. Aquí también puede haber un problema.

Caso tres

La situación es sencilla. Necesitamos depurar el script iniciado por el programador. Puedes intentar hacer esto usando php, obligar al script a escribir registros, etc. Pero hay una forma mucho más sencilla: debe redirigir la salida a un archivo. El comando es simple, parámetro adicional a nuestro equipo:

>
Se debe agregar al final del comando:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html
El signo ">" le indica al sistema que redirija la salida. El siguiente es el nombre del archivo. En nuestro caso, se especifica la ruta absoluta. Este ejemplo no es difícil de encontrar en Internet. Pero aquí nos puede aguardar un problema derivado del segundo caso. Un proveedor de alojamiento atento agrega automáticamente una redirección de salida al final de nuestra línea. Y a veces lo disfraza. El resultado es un comando como:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html >/dev/null 2>&1
Como resultado, la salida se redirige nuevamente al vacío y el archivo de salida estará vacío. Aquí puede señalarle al proveedor de alojamiento su error: fue demasiado astuto con la configuración. O puedes usar inmediatamente una muleta. Después de la redirección al comando de archivo, finalice el comando con && caracteres. Estos dos caracteres se utilizan en la línea de comando para combinar varios comandos en una línea. Le informan a la línea de comando que el comando terminó y que el siguiente comando está por llegar. Se le aplica la redirección hacia el vacío. Como resultado, la redirección al vacío permaneció y el archivo de registro se escribió correctamente. Comando de ejemplo:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html && >/dev/null 2>&1

Caso cuatro

El script se inició, pero no funciona correctamente. La razón de esto es el intérprete de php cuando se inicia desde línea de comando comienza a funcionar en un entorno configurado incorrectamente, diferente al que habría sido si se ejecutara a través de un servidor HTTP. La primera señal es que el script no encuentra archivos que estén en el mismo directorio que él, sino que comienza a considerarse ubicado en el directorio raíz del usuario, que está varias carpetas por encima de la raíz del sitio. Lo primero que hay que comprobar es entorno variable y una matriz súper global $_SERVER.

Lo primero que encontrarás en Internet sobre este problema es un consejo para escribir un comando de cambio de directorio en la corona:

CD /var/www/LOGIN/data/www/SITE/
Pero en algunos casos esto no ayuda. Hay una salida. Uno de ellos es tomar todo en sus propias manos y configurar el entorno que falta para que funcione el guión. Ya hay más información sobre esto en Internet.

A veces solo necesitas ingresar el siguiente código al comienzo del script y las rutas vuelven a funcionar.

$path_parts = pathinfo($_SERVER["SCRIPT_FILENAME"]); // determina el directorio del script chdir($path_parts["dirname"]); // establece el directorio de ejecución del script
Como puede ver, todo está escrito en funciones y no hay necesidad de preocuparse por la configuración.

Conclusión

Eso es todo. Los problemas y las soluciones no son triviales y, en general, una combinación de este tipo de escenarios fallidos es rara. Buena suerte mientras implementas tus proyectos y te mueves.




Arriba