2010-05-15 45 views
27

Quiero llamar a un archivo PHP que empieza comoEjecutar archivo PHP de otro php

<?php 
function connection() { 
    //Statements 
} 

que llamo desde el PHP así:

<?php 
exec ('/opt/lampp/htdocs/stuff/name.php'); 
?> 

me sale:

line1-> cannot open ?: No such file 
line 3 //Connection: not found 
line 4 Syntax errror: "(" 

¿Por qué esto no ejecuta correctamente el archivo name.php?

Respuesta

41

que está tratando de ejecutarlo como un script de shell, que interpreta el token <?php como bash, que es un error de sintaxis. Sólo tiene que utilizar include() o uno de sus amigos:

Por ejemplo, en a.php puesto:

<?php 
print "one"; 
include 'b.php'; 
print "three"; 
?> 

En b.php puesto:

<?php 
print "two"; 
?> 

Lienzo:

[email protected] ~ $ php a.php 
onetwothree 
+0

Ok, gracias. Yo uso include() y funciona! – nabrugir

+0

@skiria Si funciona, ¿esta es la respuesta aceptada? – tylermac

+0

lo siento, soy nuevo en esto y no sé si tengo que aceptar la respuesta .... – nabrugir

7

Parece que estás intentando ejecutar el código PHP directamente en tu caparazón. Su shell no habla PHP, por lo que interpreta su código PHP como si estuviera en el idioma nativo de su shell, como si literalmente hubiera ejecutado <?php en la línea de comandos.

Los scripts de shell usualmente comienzan con una línea "shebang" que le dice al shell qué programa usar para interpretar el archivo. Comience el archivo de la siguiente manera:

#!/usr/bin/env php 
<?php 
//Connection 
function connection() { 

Además de eso, la cadena que está pasando a exec no tiene ningún sentido. Comienza con una barra por sí mismo, utiliza demasiados puntos en la ruta y tiene un paréntesis derecho parásito.

Copie el contenido de la cadena de comandos y péguelos en su línea de comandos. Si no se ejecuta allí, entonces exec probablemente no podrá ejecutarlo tampoco.

Otra opción es cambiar el comando que ejecuta. En lugar de ejecutar el script directamente, ejecute php y pase el script como argumento. Entonces no deberías necesitar la línea shebang.

exec('php name.php'); 
+0

¿hay alguna alternativa si un servidor tiene la función desactivada exec() –

+2

Esa es una pregunta que debe hacer [pregunte en Stack Overflow] (http://stackoverflow.com/questions/ask), @Lord_linus. –

10

Exec es el descascarado al sistema operativo, y a menos que el sistema operativo tenga alguna forma especial de conocer cómo ejecutar un archivo, luego se tratará de manera predeterminada como un script de shell o similar. En este caso, no tiene idea de cómo ejecutar su archivo php. Si este script absolutamente ha de ser ejecutado de una concha, entonces o bien ejecutar php pasar el nombre de archivo como un parámetro, por ejemplo

exec ('/usr/local/bin/php -f /opt/lampp/htdocs/.../name.php)') ; 

o utilizar el punct en la parte superior de su script php

#!/usr/local/bin/php 
<?php ... ?> 
+0

Gracias. También probé exec ('/ usr/... -f /oopt.../name.php)' y funcionó. finalmente uso include() y funciona. Gracias por tu respuesta. – nabrugir

+0

para lectura puntual shebang –

1

Esto apareció mientras trabajaba en un proyecto en la plataforma de Linux.

exec('wget http://<url to the php script>) 

Esto funciona como si ejecutara el script desde el navegador.

Espero que esto ayude !!

+2

¿Por qué la gente está votando esto? ¿Hay alguna razón por la que no deberías hacerlo de esta manera? – davea0511

-6

exec('wget http://<url to the php script>') trabajado para mí.

Me permitirá integrar dos archivos php que fueron diseñados como páginas web y ejecutarlos como un código para hacer el trabajo sin afectar a la página de llamada

+0

¿Por qué la gente está votando esto? ¿Hay alguna razón por la que no deberías hacerlo de esta manera? – davea0511

+1

Votando hacia abajo porque esta operación es copiar y pegar otras respuestas como respuesta. – emotality

+0

Esto necesita un servidor web en ejecución que ejecute el script PHP con la URL dada – m13r

Cuestiones relacionadas