2010-05-15 2 views
27

Я хочу, чтобы вызвать PHP-файл, который начинается какЗапустить файл PHP с другой PHP

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

Я называю из PHP, как это:

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

я получаю:

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

Почему это правильно не запускает файл name.php?

ответ

41

Он пытается запустить его как скрипт, который интерпретирует ваш <?php фишку как Баш, который является синтаксической ошибкой. Просто используйте include() или один из его друзей:

К примеру, в a.php сайте:

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

В b.php сайте:

<?php 
print "two"; 
?> 

распечаток:

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

Хорошо, спасибо. Я использую include(), и он работает! – nabrugir

+0

@skiria Если это работает, то это принятый ответ? – tylermac

+0

извините, я новичок в этом, и я не знаю, что у меня есть ответ ... – nabrugir

7

Похоже, вы пытаетесь выполнить код PHP непосредственно в своей оболочке. Ваша оболочка не говорит на PHP, поэтому она интерпретирует ваш PHP-код, как если бы он был на родном языке вашей оболочки, как будто вы буквально запустили <?php в командной строке.

Сценарии оболочки обычно начинаются с строки «shebang», которая сообщает оболочке, какую программу использовать для интерпретации файла. Начните свой файл, например так:

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

Кроме того, строка вы передаете в exec не имеет никакого смысла. Он начинается с косой черты сам по себе, он использует слишком много периодов в пути и имеет неправильную скобку.

Скопируйте содержимое командной строки и вставьте их в командной строке. Если он не запускается там, то exec, вероятно, тоже не сможет запустить его.

Другой вариант - изменить команду, которую вы выполняете. Вместо прямого запуска скрипта запустите php и передайте свой скрипт в качестве аргумента. Тогда вам не понадобится линия shebang.

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

есть ли альтернативный, если сервер имеет функцию отключил Exec() –

+2

Это вопрос вы должны [спросить о переполнении стека] (http://stackoverflow.com/questions/ask), @Lord_linus. –

10

Exec обстреливает к операционной системе, и если ОС не имеет особого способа узнать как выполнить файл, тогда он по умолчанию будет рассматривать его как сценарий оболочки или аналогичный. В этом случае он не знает, как запустить ваш php-файл. Если этот сценарий абсолютно должен быть выполнен из оболочки, а затем либо выполнить PHP проходящее имя файла в качестве параметра, например

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

или использовать Punct в верхней части вашего PHP скрипт

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

Спасибо. Я также попробовал exec ('/ usr/... -f /oopt.../name.php), и он либо работал. наконец, я использую include(), и он работает. Спасибо за Ваш ответ. – nabrugir

+0

для punct read shebang –

1

Это натолкнулось на работу над проектом на платформе linux.

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

Это работает так, как если бы вы запускали скрипт из браузера.

Надеюсь, что это поможет!

+2

Почему люди голосуют это? Есть ли причина, почему вы не должны делать это таким образом? – davea0511

-6

exec('wget http://<url to the php script>') работал для меня.

Это позволит мне объединить две PHP-файлы, которые были разработаны в качестве веб-страницы и запускать их в качестве кода, чтобы сделать работу, не влияя на вызывающую страницу

+0

Почему люди голосуют за это? Есть ли причина, почему вы не должны делать это таким образом? – davea0511

+1

Голосование, потому что эта отбивная копирует и вставляет другие ответы в качестве ответа. – emotality

+0

Для этого требуется работающий веб-сервер, который выполняет скрипт PHP с заданным URL-адресом – m13r

Смежные вопросы