Xdebug、AngularJS和PhpStorm中不应出现的PHP警告
这是一个令人头痛的问题。我继承了一个服务器端由PHP支持的AngularJS项目。我的任务是编写一个小的数据缓存函数,它非常简单。不幸的是,这就是前端出现问题的时候。在继续之前,我将展示我的PHP代码,这样我就可以指向一些东西。文件结构和其他分类名称因NDA而更改,与问题无关的代码已删除:Xdebug、AngularJS和PhpStorm中不应出现的PHP警告,php,angularjs,phpstorm,xdebug,Php,Angularjs,Phpstorm,Xdebug,这是一个令人头痛的问题。我继承了一个服务器端由PHP支持的AngularJS项目。我的任务是编写一个小的数据缓存函数,它非常简单。不幸的是,这就是前端出现问题的时候。在继续之前,我将展示我的PHP代码,这样我就可以指向一些东西。文件结构和其他分类名称因NDA而更改,与问题无关的代码已删除: define('ROOT', dirname(__FILE__)); require('config/config.php'); require('includes/includes.php'); // c
define('ROOT', dirname(__FILE__));
require('config/config.php');
require('includes/includes.php');
// caching
function cacheCategories()
{
$dirPath = ROOT . '/cache/categories';
$cacheFileName = '/categories.json';
$cacheFilePath = $dirPath . $cacheFileName;
$cacheTime = 86400;
if (file_exists($cacheFilePath) && (time() - $cacheTime) < filemtime($cacheFilePath)) { // cache file exists and is fresh
$cachedJSON = readfile($cacheFilePath);
if ($cachedJSON === false) {
throw new Exception('Could not read from cache file');
}
} else {
include_once('/site/load.php');
$categories = load_categories_tree();
$cachedJSON = json_encode($categories);
if (!is_dir($dirPath)) {
mkdir($dirPath);
}
$fp = fopen($cacheFilePath, 'w');
if ($fp === false) {
throw new Exception('Could not open cache file');
}
if (flock($fp, LOCK_EX)) {
$writeResult = fwrite($fp, $cachedJSON);
if ($writeResult === false) {
throw new Exception('Could not write to cache');
}
flock($fp, LOCK_UN);
fclose($fp);
}
}
return $cachedJSON;
}
global $page;
$page = new Page('');
$page->setDefaultLanguage('en');
echo cacheCategories();
您正在创建一个绝对路径:
/cache/categories/categories.json
^---root of your filesystem
产生
您正在尝试创建c:\cache\categories\categories.json
,而不是c:\path\to\your\site\cache\categories.json
请记住,PHP是在文件系统级别运行的。从Web的角度来看,它不了解站点的结构<代码>/…对于PHP来说是“硬盘的根”,而不是“站点的根”。明白了。就像有人在对我的问题的一条显然已被删除的评论中所说的那样,
是\u dir()
缓存了以前失败状态的结果。调用clearstatcache()立即将其清除。是否所有这些目录都存在?权限是否设置为777
?是的,目录存在,是的,权限设置为777客户端代码中没有任何内容会导致此问题,除非路径设置不正确。路径设置正确。正如我所说,直到我在PhpStorm中启用零配置PHP调试,这才发生。我没有改变路径,无论如何,我记不起mkdir
是如何准确工作的。您是否首先需要在/categories之前创建/cache目录?啊-参见第三个参数recursive
。是的,它在实际文件中是不同的。就像我说的,由于NDA,这里的一些文件结构是不同的。它指向我的机器上正确的位置。然后开始测试是否可读,文件是否存在,等等。。。fopen并不是无缘无故地返回false,而是已经找到了答案。不过,谢谢。:)我还根据您的回答/建议,用更合理的目录路径更新了我的问题。这与我的实际代码没有关系,但为了子孙后代,应该让事情变得更清楚。
/cache/categories/categories.json
^---root of your filesystem