我想调用一个像
一样启动的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文件?
答案 0 :(得分:55)
它试图将其作为shell脚本运行,它将您的<?php
令牌解释为bash,这是一个语法错误。只需使用include()
或其中一位朋友:
例如,在a.php
put:
<?php
print "one";
include 'b.php';
print "three";
?>
在b.php
put:
<?php
print "two";
?>
打印:
eric@dev ~ $ php a.php
onetwothree
答案 1 :(得分:11)
exec正在对操作系统进行shell操作,除非操作系统有一些了解如何执行文件的特殊方法,否则它将默认将其视为shell脚本或类似文件。 在这种情况下,它不知道如何运行您的PHP文件。 如果绝对必须从shell执行此脚本,则执行php将文件名作为参数传递,例如
exec ('/usr/local/bin/php -f /opt/lampp/htdocs/.../name.php)') ;
或使用php脚本顶部的punct
#!/usr/local/bin/php
<?php ... ?>
答案 2 :(得分:9)
听起来你正试图直接在shell中执行PHP代码。你的shell不会说PHP,所以它解释你的PHP代码,好像它是用shell的本地语言编写的,好像你在命令行中运行<?php
一样。
Shell脚本通常以“shebang”行开头,该行告诉shell用于解释文件的程序。像这样开始你的文件:
#!/usr/bin/env php
<?php
//Connection
function connection () {
除此之外,你传递给exec
的字符串没有任何意义。它首先是一个斜杠,它在路径中使用了太多的句点,并且它有一个假的右括号。
复制命令字符串的内容并将其粘贴到命令行。如果它没有在那里运行,那么exec
可能也无法运行它。
另一个选项是更改您执行的命令。不是直接运行脚本,而是运行php
并将脚本作为参数传递。然后你不应该需要shebang线。
exec('php name.php');
答案 3 :(得分:2)
在linux平台上开展项目时遇到了这个问题。
exec('wget http://<url to the php script>)
这就像从浏览器运行脚本一样。
希望这会有所帮助!!
答案 4 :(得分:-6)
exec('wget http://<url to the php script>')
为我工作。
它使我能够集成两个设计为网页的php文件,并将它们作为代码运行,而不会影响调用页面