尝试包含文件时出现Require()php错误


Require() php error when trying to include files

嗨,我目前正试图在PHP脚本中包含一些函数,但一直遇到一个错误,我真的很难弄清楚。我已经检查了权限和其他一些事情,但都没有用。

这是我的php——其中的代码只是测试一些东西,我不认为它不会影响"require()"调用,但我可能显然错了。

#!/usr/bin/env php
<?php
require(__DIR__ . "/../includes/config.php");
if ($argc !=2)
{
    print("Please specify file path 'n");
    return -1;
}
$file = $argv[1];
print($file);
if (!file_exists($file))
    {
        print("Error: file " . $file . " doesn't exist'n");
        //return -1;  
    } 
if (is_writable($file)) 
    {
        $copy = 'copy1.txt';
        $handle = file_get_contents($file);
        file_put_contents($copy, $handle);
    } 
else 
    {
        echo "The file $filename is not writable 'n";
    }
end;
$test = query("INSERT INTO  `pset8`.`places` (
        `id` ,
        `country_code` ,
        `postal_code` ,
        `place_name` ,
        `admin_name1` ,
        `admin_code1` ,
        `admin_name2` ,
        `admin_code2` ,
        `admin_name3` ,
        `admin_code3` ,
        `latitude` ,
        `longitude` ,
        `accuracy`
        )
        VALUES (
        '2',  '',  '',  '',  '',  '',  '',  '',  '',  '',  '',  '',  ''
        )");
?>

这是一个错误:

PHP Warning:  require(../vendor/library50-php-5/CS50/CS50.php): failed to open stream: No such file or directory in /home/ubuntu/workspace/pset8/includes/config.php on line 20
PHP Stack trace:
PHP   1. {main}() /home/ubuntu/workspace/pset8/bin/import:0
PHP   2. require() /home/ubuntu/workspace/pset8/bin/import:3
Warning: require(../vendor/library50-php-5/CS50/CS50.php): failed to open stream: No such file or directory in /home/ubuntu/workspace/pset8/includes/config.php on line 20
Call Stack:
    0.0002     235656   1. {main}() /home/ubuntu/workspace/pset8/bin/import:0
    0.0022     238328   2. require('/home/ubuntu/workspace/pset8/includes/config.php') /home/ubuntu/workspace/pset8/bin/import:3
PHP Fatal error:  require(): Failed opening required '../vendor/library50-php-5/CS50/CS50.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/ubuntu/workspace/pset8/includes/config.php on line 20
PHP Stack trace:
PHP   1. {main}() /home/ubuntu/workspace/pset8/bin/import:0
PHP   2. require() /home/ubuntu/workspace/pset8/bin/import:3
Fatal error: require(): Failed opening required '../vendor/library50-php-5/CS50/CS50.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/ubuntu/workspace/pset8/includes/config.php on line 20
Call Stack:
    0.0002     235656   1. {main}() /home/ubuntu/workspace/pset8/bin/import:0
    0.0022     238328   2. require('/home/ubuntu/workspace/pset8/includes/config.php') /home/ubuntu/workspace/pset8/bin/import:3

提前感谢!

这当然不是权限问题,而是包含来自正确路径的文件的问题。根据我从你的错误中读到的,以及你在评论中所说的,你的includes/requires似乎来自错误的路径。

根据文档,__DIR__返回当前文件的路径。例如,您的config.php文件将返回/home/ubuntu/workspace/pset8/includes

当您现在在包含(例如:include __DIR."/../";)时在末尾使用/../时,这意味着转到一个文件夹,以路径/home/ubuntu/workspace/pset8结尾。您可以多次执行此操作(例如:include __DIR."/../../";将在/home/ubuntu/workspace上结束)。

所以基本上,你需要随时知道自己在哪里,并从中包括在内。您也可以对其进行硬编码(这样您就可以include "/home/ubuntu/workspace/pset8/includes/config.php";),但我建议使用一种更动态的方法(如果您最终使用不同的主机,那么您只需更改几行而不是多行)。

你可以定义一个包含的变量,比如

define("BASEFOLDER", "/home/ubuntu/workspace/pset8");
require BASEFOLDER."/includes/config.php";

请注意,您需要为每个文件定义BASEFOLDER,它不是全局定义。