2011-12-09 59 views
35

¿Cómo haré que mi servidor ejecute un script php al activarlo manualmente usando php? Básicamente tengo un archivo cronjob bastante grande que se ejecuta cada 2 horas, pero quiero poder desencadenar el archivo manualmente sin tener que esperar a que se cargue (quiero que se haga por el lado del servidor).Ejecutar un script PHP desde otro script PHP

EDITAR: Quiero ejecutar el archivo desde un archivo php ... No línea de comandos.

+2

¿Simplemente ejecuta el mismo comando que el cron? O simplemente haz 'php file.php'? –

+1

¿Por qué no simplemente copia el comando del crontab y lo pega en la línea de comando? –

+0

@Rocket Quiero hacerlo desde un archivo php – domino

Respuesta

82

Puede invocar un script PHP manualmente desde la línea de comandos

hello.php 
<?php 
echo 'hello world!'; 
?> 

Command line: 
php hello.php 

Output: 
hello world! 

Consulte la documentación: http://php.net/manual/en/features.commandline.php


EDITAR OP editó la pregunta para añadir un detalle fundamental: el script debe ser ejecutado por otro script.

Hay un par de enfoques. Primero y más fácil, simplemente podría incluir el archivo. Cuando incluye un archivo, el código dentro se "ejecuta" (en realidad, se interpreta). Cualquier código que no esté dentro de una función o cuerpo de clase se procesará inmediatamente. Consulte la documentación para include (docs) y/o require (docs) (nota: include_once y require_once están relacionados, pero son diferentes de manera importante. Consulte los documentos para comprender la diferencia) Su código sería este:

include('hello.php'); 
/* output 
hello world! 
*/ 

Segunda y un poco más compleja es utilizar shell_exec (docs). Con shell_exec, llamará al binario php y pasará el script deseado como argumento. Su código se vería así:

$output = shell_exec('php hello.php'); 
echo "<pre>$output</pre>"; 
/* output 
hello world! 
*/ 

Por último, y lo más complejo, se puede usar la biblioteca CURL para llamar al archivo como si se hubiera solicitado a través de un navegador.Echa un vistazo a la documentación de la biblioteca CURL aquí: http://us2.php.net/manual/en/ref.curl.php

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.myDomain.com/hello.php"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) 

$output = curl_exec($ch); 
curl_close($ch); 
echo "<pre>$output</pre>"; 
/* output 
hello world! 
*/ 

Documentación de funciones utilizado

+1

Quiero hacerlo desde un archivo php, no una línea de comando. – domino

+1

¡Esa habría sido información muy útil para incluir en su pregunta! : P Consulte la edición, analizo las numerosas formas de llamar a un script PHP desde otro. –

+0

¡Muchas gracias por la larga respuesta! – domino

0

Si se trata de una máquina Linux debe ejecutar algo como:

php /folder/script.php 

En Windows, lo que se necesita para asegurarse de que su archivo php.exe es parte de su camino, y hacer un enfoque similar a la el archivo que desea ejecutar:

php C:\folder\script.php 
0

en la línea de comandos:

> php yourfile.php 
0

Open SSH y ejecutar el comman d manualmente?

php /path/to/your/file.php 
2

puede utilizar la notación de acento grave:

`php file.php`; 

También se puede poner esto en la parte superior del archivo php para indicar al intérprete:

#!/usr/bin/php 

cambiarlo a donde pones php. a continuación, dar permiso de ejecución en el archivo y se puede llamar al archivo sin especificar php:

`./file.php` 

Si desea capturar la salida del script:

$output = `./file.php`; 
echo $output; 
+0

esta respuesta no es relevante, pero es bueno saberlo. –

-4

Creo que esto es lo que eres buscando

<?php include ('Scripts/Php/connection.php'); 
//The connection.php script is executed inside the current file ?> 

El archivo de secuencia de comandos también puede estar en un formato .txt, que aún debe trabajar, lo hace para mí

p. Ej.

<?php include ('Scripts/Php/connection.txt'); 
//The connection.txt script is executed inside the current file ?> 
5

El OP refinó su pregunta sobre cómo se llama un script php desde un script. El enunciado php 'require' es bueno para la dependencia ya que el script se detendrá si no se encuentra el script requerido.

#!/usr/bin/php 
<? 
require '/relative/path/to/someotherscript.php'; 

/* The above script runs as though executed from within this one. */ 

printf ("Hello world!\n"); 

?> 
0

a otro programa php desde dentro de su código de "cadena", utilice "cabecera"

header("Location:index.php?page=menus");

+0

Si el script inicial se ejecuta desde un CRON, no ejecutará los encabezados como acabo de descubrir, en caso de que alguien más tenga el mismo problema. – BeNice

2

Yo prefiero usar

require_once('phpfile.php'); 

un montón de opciones que hay para usted . y una buena manera de mantener las cosas limpias.

0
<?php 
$output = file_get_contents('http://host/path/another.php?param=value '); 
echo $output; 
?> 
+1

proporciona un contexto y explica tu código. –

Cuestiones relacionadas