嗨,我目前正试图在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
,它不是全局定义。