我刚刚使用var/www
将项目上传到slim framework
中的服务器,项目的文件夹结构如下:
include
-Functions.php
controller
-weeklysummary.php
(我要运行的脚本)
vendor
-autoload.php
当我尝试在Functions.php
脚本中调用一个函数在我的本地机器上,该项目工作正常,但在服务器上它一直告诉我`
Warning: require(../vendor/autoload.php): failed to open stream: No such file or directory in /var/www/html/project/include/Functions.php on line 11
Fatal error: require(): Failed opening required '../vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/innov8alert/include/Functions.php on line 11`
这就是Functions.php
的样子
class Functions {
private $conn;
function __construct() {
require_once 'Connect.php';
require '../vendor/autoload.php';
require '../mailer/class.phpmailer.php';
$db = new Connect();
$this->conn = $db->connect();
}
function __destruct() {
}
答案 0 :(得分:0)
这是由于您的当前工作目录(CWD),它与您启动脚本的目录相匹配。如果这是一个网站,应该可以安全地假设CWD是index.php文件所在的位置。
解决这个问题的方法有两种:
1)正如评论中所建议的,从index.php内部声明一个BASEPATH
常量,并始终使用它来包含路径前缀:
// index.php:
define('BASEPATH', __DIR__.'/');
// other files:
// require BASEPATH.'path/relative/to/index.php/directory
2)使用__DIR__
magic constant本身为文件添加前缀,但相对于您包含文件的位置(这将立即适用于您的情况而无需其他更改):
require __DIR__.'/../vendor/autoload.php';