Ejecutar script desde un componente

Buenas!,

tengo un problemilla. Necesito ejecutar un script desde un componente (directorio /protected/components), que está situado en la misma carpeta.

No consigo ejecutarlo, no se por qué. El script probado a mano funciona bien, así que supongo que no se está llegando a ejecutar. El problema es que tengo que dejar el script en segundo plano y que la respuesta retorne lo antes posible, para lo cual tengo que reidrigir la salida estándar y de error a /dev/null, ya que a otro fichero no puedo, por falta de permisos, y no puedo ver si está fallando algo, o es que no encuentra el script. He probado a ejecutarlo con la ruta absoluta de la siguiente forma, y también con una ruta relativa (línea comentada):


$arg = json_encode($msgsIndex);

$path = Yii::app()->params['PATH_TO_APP'] . "/protected/components/IndexHelper.php";

//$path = "IndexHelper.php";

shell_exec("php -f ". $path . "'" . $arg . "' > /dev/null 2>/dev/null &");

Sabéis que puedo estar haciendo mal? Gracias.

Hola Dani,

Los componentes en Yii, normalmente son clases (heredadas o tipo helper) que complementan o personalizan al framework.

Por lo que veo en el ejemplo, hay dos posibilidades:

  1. Que lo que necesite realmente sea un comando de Yii (que se ubica en el directorio protected/commands, que normalmente no existe por defecto), que se asemeja en funcionalidad a las migraciones, ej: ./protected/yiic miComando parametro1

  2. Que necesite la clase para usarla dentro del otro componente, en donde debería llamarla usando “Yii::import(‘application.components.IndexHelper’)”… y después puede usarla directamente, asumiendo que ya existe… IndexHelper::funcion01() o instanciando la clase: $v = new IndexHelper()

Saludos.