php require() 不适用于相对或完整
Posted
技术标签:
【中文标题】php require() 不适用于相对或完整【英文标题】:php require() does not work with relative or full 【发布时间】:2016-12-23 02:17:04 【问题描述】:require()
命令有一个奇怪的问题,它根本不起作用并给我一个奇怪的错误。是的,我 100% 确定我输入了正确的路径
我尝试使用相对路径和完整路径,以及使用include()
、include_once()
、require()
、require_once()
,但无济于事..
我测试了文件的存在,它确实存在..这对我来说毫无意义!
我在论坛上没有看到其他人遇到与此相同的问题,我也尝试过使用$_SERVER["DOCUMENT_ROOT"]
等全局变量和其他路径,但这仍然对我不起作用。
程序是: html 按钮 -> ajax 调用“addcmets.php” -> 页面需要“ajax.php”-> 错误
addcmets.php 页面:
//set path
$path = "g:/appserv/www/y4project/scripts/php/funcs/";
//check directory
print_r(scandir($path));
//check if php file exists
if(file_exists($path."ajax.php"))
echo "######### IT EXISTS!!! ##########";
else echo "@@@@@@ NO! @@@@@@@@";
//require it
require($path."ajax.php");
错误:
Array (
[0] => .
[1] => ..
[2] => account.php
[3] => ajax.php
[4] => main.php
[5] => service.php )
######### IT EXISTS!!! ##########
Warning: require(1) [function.require]: failed to open stream: No such file or directory in G:\AppServ\www\y4project\scripts\AJAX\addcomments.php on line 10
Fatal error: require() [function.require]: Failed opening required '1' (include_path='.;C:\php5\pear') in G:\AppServ\www\y4project\scripts\AJAX\addcomments.php on line 10
我也试过像“../php/funcs/ajax.php”这样的相对路径,同样的问题..scandir()
和file_exists()
都找到了,但是require()
失败了!
非常感谢您的帮助!
编辑
我只是对它进行了确定,从不同的测试页面要求它并使用了一个函数并且它工作,但仍然无法从 AJAX 调用的“addcmets.php”页面工作。
另一个编辑
我还检查了 PHP require_once()
和 require()
的文档,我仍然看不到问题!
这可能是某种路径错误或安全措施导致 AJAX 调用的脚本无法调用其他脚本吗?但这没有任何意义? 我也没有在文档中读到任何关于此的内容。 我什至尝试过要求 HTML 页面,但仍然无法正常工作。
我迷路了..
【问题讨论】:
您是否尝试过使用 \ (而不是 / )并更正大写/小写?例如,将appserv
更改为 AppServ
,因为它在您的计算机中命名。所以有这样的东西:require("G:\AppServ\www\y4project\scripts\php\funcs\ajax.php");
file_exists() 并不是特别有用。试试is_readable()
。 file_exists 会告诉你在上锁的银行金库里有一个“免费的,拿一个”篮子,但这并不意味着你真的可以进去拿那个免费的东西。
@DanielDudas 我做了,什么都没有……
文件名应该是“1”这很奇怪......是什么将该字符串转换为数字?尝试使用单引号或保留括号(不需要它们,因为 require
是一种语言结构而不是函数)。
@MarcB 刚刚测试它,它返回 true
【参考方案1】:
你可以尝试这样使用:
require dirname(__DIR__) . "/php/funcs/ajax.php";
【讨论】:
不,没用..也试过“./../”,没用...我敢打赌 AJAX 调用会导致某些事情,我仍然可以还没弄清楚它是什么.. 然后尝试在没有 AJAX 的情况下直接在浏览器中打开 addcmets.php 来检验这个假设。 你能分享两个文件中var_dump(__DIR__);
的结果吗?
@YetiCGN 我做了,当我像从网络浏览器一样调用它时它可以工作,但是当涉及 AJAX 时需要失败,我确实在主帖子中说明了所有内容
“当涉及(原文如此!)AJAX”与在浏览器中打开页面或在命令行上使用 cURL 或 wget 或类似方法相比,后端的处理没有什么不同。在 Chrome 中打开开发者工具并检查网络选项卡以查看网络上发生的情况并比较两者。另请注意:您确定在您正在编辑的项目中没有其他版本的addcomments.php
,这就是您看不到任何更改的原因吗?以上是关于php require() 不适用于相对或完整的主要内容,如果未能解决你的问题,请参考以下文章