尝试包含文件时需要()php错误

时间:2016-01-05 21:38:55

标签: php sql

您好我正在尝试在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

提前致谢!

1 个答案:

答案 0 :(得分:1)

这肯定不是权限问题,而是从正确的路径中包含文件。从我可以读取您的错误以及您在评论中说明的内容来看,includes / requires似乎包含了错误的路径。

根据documentation__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,它不是全局定义。