2010-10-17 44 views
46

He estado tratando de entender el significado exacto/propósito de cargar php como un módulo de Apache frente al resto.mod_php vs cgi vs fast-cgi

Cuando php está instalado como módulo apache, ¿qué ocurre exactamente? Por ejemplo, ¿la lectura del archivo php-ini ocurre cada vez que viene la solicitud php o cuando el módulo php se carga solo?

Respuesta

22

php.ini se lee cuando el módulo de PHP se carga tanto en mod_php, FastCGI y FPM. En el modo CGI normal, el archivo de configuración debe leerse en tiempo de ejecución porque no hay procesos prefabricados de ningún tipo.

Creo que la única ventaja real de ejecutar PHP como un módulo dentro del servidor web es que la configuración puede ser más fácil. Obtienes un rendimiento mucho mejor cuando lo ejecutas en modo FastCGI o FPM y puedes utilizar un Apache enhebrado o con vértigo (en lugar de bifurcado), o cuando puedes eliminar a Apache por completo.

+0

Para ser más específico, diga si tengo una variable que pueda ser utilizada por todas las solicitudes. En otras palabras, supongamos que tenemos que hacer que el intérprete de php busque archivos relacionados con la ruta de acceso de cerstain (/ home/user/documents). ¿Seré capaz de almacenar/home/user/documents en una configuración y cargarlo una vez en alguna variable global? De esta forma si el usuario emite file_get_contents ("new.txt"), se traduce a file_get_contents ("/ home/user/documents/new.txt") –

+0

Consulte la configuración de PHP auto_prepend_file, que le dará la oportunidad de anteponer PHP código que se ejecutará antes de analizar la solicitud real. dentro de su archivo auto_prepended, use chdir() para cambiar el directorio. Sin embargo, tenga en cuenta que esto interceptará TODAS las operaciones de archivos, incluso include() y require()! –

+1

@Karthick: ¿Por qué el intérprete de PHP almacena esa información? Ese tipo de información es para que su código se preocupe. Cuando no le da una ruta de acceso absoluta a un archivo, se ve en relación con el script que está ejecutando el intérprete de PHP. Y no, las diferentes instancias de intérpretes de PHP no pueden ni deben compartir datos entre ellos. – Anand

2

php.ini se lee cuando el módulo se carga en el caso de un módulo Apache. PHP CGI utiliza un ejecutable de intérprete php como lo haría cualquier otro script de shell. Como no hay un estado involucrado en cada invocación, el archivo de configuración debería leerse cada vez en caso de CGI.

+0

Lea el comentario que acabo de publicar en la otra respuesta. ¡Mira si pudiste conseguirlo! –

Cuestiones relacionadas