Я хочу назвать файл 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 файл?
Он пытается запустить его как сценарий оболочки, который интерпретирует ваш токен Php
как bash, что является синтаксической ошибкой. Просто используйте include ()
или одного из его друзей:
Например, в a.php
поместите:
<?php
print "one";
include 'b.php';
print "three";
?>
В b.php
поместите:
<?php
print "two";
?>
Печать:
eric@dev ~ $ php a.php
onetwothree
exec выполняет оболочку для операционной системы, и, если ОС не имеет какого-либо особого способа узнать, как выполнить файл, по умолчанию он будет рассматривать его как сценарий оболочки или аналогично. В этом случае он не знает, как запустить ваш php-файл. Если этот сценарий абсолютно необходимо выполнить из оболочки, то либо выполните php, передав имя файла в качестве параметра, например,
exec ('/usr/local/bin/php -f /opt/lampp/htdocs/.../name.php)') ;
или используйте точку в верхней части php-скрипта
#!/usr/local/bin/php
<?php ... ?>
Похоже, вы пытаетесь выполнить код PHP непосредственно в своей оболочке. Ваша оболочка не говорит на PHP, поэтому она интерпретирует ваш PHP-код так, как если бы он был на родном языке вашей оболочки, как если бы вы буквально выполнили Php
в командной строке.
Сценарии оболочки обычно начинаются со строки «shebang», которая сообщает оболочке, какую программу использовать для интерпретации файла. Начните свой файл так:
#!/usr/bin/env php
<?php
//Connection
function connection () {
Кроме того, строка, которую вы передаете в exec
, не имеет никакого смысла. Оно начинается с косой черты само по себе, в пути используется слишком много точек и неправильная правая скобка.
Скопируйте содержимое командной строки и вставьте его в командную строку. Если он там не запускается, то exec
, вероятно, тоже не сможет его запустить.
Другой вариант - изменить выполняемую команду. Вместо того, чтобы запускать сценарий напрямую, запустите php
и передайте свой сценарий в качестве аргумента. Тогда вам не понадобится линия shebang.
exec('php name.php');