您好我正在尝试在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
提前致谢!
答案 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
,它不是全局定义。