Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.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
Php Lumen-更改默认存储路径_Php_Laravel_Lumen - Fatal编程技术网

Php Lumen-更改默认存储路径

Php Lumen-更改默认存储路径,php,laravel,lumen,Php,Laravel,Lumen,我正在尝试了解如何更改Lumen项目上的默认存储位置(包括其子文件夹)。出于多种原因,考虑到生产web服务器的当前配置,Lumen在尝试写入日志或编译刀片视图时会抛出权限拒绝异常 在不涉及系统管理员的情况下,唯一的替代方法是将存储文件夹移动到Web服务器上的tmp文件夹 在laravel上似乎有一种称为“useStoragePath”的方法,但在Lumen(5.2.x)上似乎没有 默认路径似乎是“硬编码”的,我发现: Project\vendor\laravel\lumen-framework\

我正在尝试了解如何更改Lumen项目上的默认存储位置(包括其子文件夹)。出于多种原因,考虑到生产web服务器的当前配置,Lumen在尝试写入日志或编译刀片视图时会抛出权限拒绝异常

在不涉及系统管理员的情况下,唯一的替代方法是将存储文件夹移动到Web服务器上的tmp文件夹

在laravel上似乎有一种称为“useStoragePath”的方法,但在Lumen(5.2.x)上似乎没有

默认路径似乎是“硬编码”的,我发现:

Project\vendor\laravel\lumen-framework\src\Application.php

/**
     * Get the storage path for the application.
     *
     * @param  string|null  $path
     * @return string
     */
    public function storagePath($path = null)
    {
        return $this->basePath().'/storage'.($path ? '/'.$path : $path);
    }
对于日志(同一文件):

底线:记住这些限制,是否有任何干净的方法覆盖默认存储路径?:

  • 它不应该涉及系统管理员(sym链接、更改权限等)
  • 不篡改供应商文件夹

这里的关键是这一行:

if (! function_exists('storage_path'))
这意味着如果名为
storage\u path
的函数尚未定义,则Lumen将使用自己的实现

您只需编写自己的函数,返回自己的自定义路径即可

因为Lumen的规则比Laravel少得多,所以如何做到这一点完全取决于您。也就是说,我建议按以下方式进行:

  • 在应用程序目录下放置一个名为helpers.php的文件
  • 将任何和所有自定义助手函数添加到此文件中,包括您自己的
    存储路径
    实现
  • 确保在Lumen自身之前加载此文件。为了做到这一点,您需要将require语句放在composer的自动加载器之前。这可以在bootstrap/app.php下的第一行完成:


  • 如何将其设置为
    /public
    if (! function_exists('storage_path')) {
        /**
         * Get the path to the storage folder.
         *
         * @param  string  $path
         * @return string
         */
        function storage_path($path = '')
        {
            return app()->storagePath($path);
        }
    }
    
    if (! function_exists('storage_path'))
    
    require_once __DIR__ . '/../app/helpers.php';
    require_once __DIR__ . '/../vendor/autoload.php';
    
    try {
        (new Dotenv\Dotenv(__DIR__ . '/../'))->load();
    } catch (Dotenv\Exception\InvalidPathException $e) {
        //
    }
    
    ....