comando dump-autoload de php

Estoy construyendo una aplicación web donde el usuario puede cargar dinámicamente archivos php de Controladores desde el navegador web. Hay un problema en todo esto.

Dado que cada clase debe comstackrse para poder usarse dentro de laravel, se debe ejecutar el composer dump-autoload comandos composer dump-autoload . Pero no quiero hacerlo manualmente desde la terminal. Dentro de una “clase de registro” he llamado explícitamente algunos comandos que no me han funcionado, por ejemplo:

  • Artisan::call('dump-autoload');
  • exec("/path/to/app/composer dump-autoload");
  • shell_exec('php artisan dump-autoload');
  • shell_exec('composer dump-autoload');

Los nuevos controladores todavía no se encuentran. Entonces, no sé lo que me estoy perdiendo. O si hay otra forma de “cargar” mis clases de forma dinámica.

Cosas para considerar:

  1. Implicaciones de seguridad: por supuesto, pero mi pregunta está ampliamente abierta para reconocer dinámicamente nuevas clases en tiempo de ejecución
  2. Estoy completamente seguro de las rutas, he probado todos los problemas desde un terminal de Linux y todo funcionó bien (con ruta absoluta y relativa). Por estas razones, busco otra razón en lugar de caminos.
  3. Don't forget to actually 'require' or 'include' the class after you compile it Claro, el archivo está incluido y confirmado por el punto 2.
  4. Esto parece sospechoso:

    mi suposición improvisada sería que el usuario que ejecuta php no tiene suficientes privilegios para realizar la operación o escribir en los directorios necesarios

    Sin embargo, ¿cómo podría ser posible que php no tenga suficientes privilegios, podría afectar el comando composer dump-autoclass ?

  5. Apache / 2.4.9 (Fedora) PHP / 5.5.12

Bueno para resolver esto puedes hacer esto:

 exec("composer dump-autoload -d /path/to/laravel-project/"); 

Tienes que decirle explícitamente al compositor dónde buscar composer.json .

-d Si se especifica utiliza el directorio dado como directorio de trabajo

Sin la opción -d , el compositor asume que su composer.json vive en path/to/laravel-project/public/ . Debido a que todas las solicitudes se enrutan al controlador frontal index.php y significa que el directorio de trabajo actual es public/

No hay suficiente información aquí para ayudarnos a ayudarlo.

Cosas para considerar:

  • Solo quiero mencionar las horribles implicaciones de seguridad
  • No voy a abordar los problemas de ruta, solo asegúrese de que sean completos y absolutos
  • mi suposición improvisada sería que el usuario que ejecuta php no tiene suficientes privilegios para realizar la operación o escribir en los directorios necesarios
  • no se olvide de realmente ‘requerir’ o ‘incluir’ la clase después de comstackrla
  • asegúrese de que el autocargador esté disparando, tal vez con algún registro o similar
  • asegúrese de que no tiene activado el modo seguro php y de que mueve el archivo cargado antes de realizar cualquier trabajo en él

Intente actualizar su pregunta con información adicional si puede.