Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xdebug、AngularJS和PhpStorm中不应出现的PHP警告_Php_Angularjs_Phpstorm_Xdebug - Fatal编程技术网

Xdebug、AngularJS和PhpStorm中不应出现的PHP警告

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

这是一个令人头痛的问题。我继承了一个服务器端由PHP支持的AngularJS项目。我的任务是编写一个小的数据缓存函数,它非常简单。不幸的是,这就是前端出现问题的时候。在继续之前,我将展示我的PHP代码,这样我就可以指向一些东西。文件结构和其他分类名称因NDA而更改,与问题无关的代码已删除:

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