Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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 Symfony创建新文件夹权限_Php_Apache_Symfony_Capistrano_Capifony - Fatal编程技术网

Php Symfony创建新文件夹权限

Php Symfony创建新文件夹权限,php,apache,symfony,capistrano,capifony,Php,Apache,Symfony,Capistrano,Capifony,我使用Capifony部署了一个项目,在创建文件夹时出错。以下代码位于服务内部。也可能在控制器内,这无关紧要 $dir = $kernelDir . '/../web/newfolder/';// kerneldir is %kernel.root_dir% $fs=new Filesystem(); $fs->mkdir($dir); 这将尝试在web中创建新文件夹,但将失败 问题是web文件夹的权限: drwxrwxr-x 11 deploy deploy 4096 Feb 1

我使用Capifony部署了一个项目,在创建文件夹时出错。以下代码位于服务内部。也可能在控制器内,这无关紧要

$dir = $kernelDir . '/../web/newfolder/';// kerneldir is %kernel.root_dir%
$fs=new Filesystem();
$fs->mkdir($dir);
这将尝试在web中创建新文件夹,但将失败

问题是web文件夹的权限:

drwxrwxr-x 11 deploy deploy    4096 Feb 15 14:52 web
deploy
是在web服务器上进行部署的用户。web服务器的用户是默认的
www-data
,但是如果我将www-data设置为web目录的所有者,是否有问题?这意味着每个人都可以修改web中的所有内容

我还尝试在
web/uploads
文件夹中创建一个文件夹,但也失败了

如何让
www-data
在其无权访问的文件夹中创建文件夹,而不破坏安全性?我是否需要将其中一个用户添加到新组或其他内容?我需要修改部署文件吗?我是否需要使用www数据作为部署用户?解决这个问题的方法是什么

这里还有我的Capifony文件,如果有帮助的话(我已经用一个字符串替换了域。部署工作正常):

我的想法是:

set :shared_children,     [app_path + "/logs", web_path + "/uploads", "vendor",web_path + "/newfolder"]


set :writable_dirs,     ["app/cache", "app/logs", web_path + "/newfolder", web_path + "/medics"]
这将导致

drwxrwxrwx+ 4 deploy deploy   4096 Feb 15 15:36 cache

lrwxrwxrwx  1 deploy deploy     36 Feb 15 15:35 logs -> /var/www/html/testproj/shared/app/logs

lrwxrwxrwx  1 deploy deploy     38 Feb 15 15:35 newfolder-> /var/www/html/testproj/shared/web/newfolder

lrwxrwxrwx  1 deploy deploy     39 Feb 15 15:35 uploads -> /var/www/html/testproj/shared/web/uploads
如果Capifony为这些文件夹授予这些权限,可以吗

  • 创建一个目录,您将在该目录下创建运行时目录,例如
    app/mydirs
    ,并将其添加到vcs历史记录中

  • 将目录添加到部署配置:

    set :shared_children,     [app_path + "/logs", web_path + "/uploads", "vendor", app_path + "/mydirs"]
    set :writable_dirs,     ["app/cache", "app/logs", "app/mydirs"]
    
  • 更改代码以使用此目录:

    $dir = $kernelDir . '/mydirs/newfolder/';// kerneldir is %kernel.root_dir%
    $fs=new Filesystem();
    $fs->mkdir($dir);
    
  • 解释其“自动”功能:

    用于设置权限。它不会更改目录的所有权。
    权限将在部署时应用,并且仅影响已存在的目录

    关于可写公共目录的安全问题:

    用户上传的文件不应被信任。将文件上载到公共目录会解锁许多可能的漏洞,必须非常小心。对于上传的头像,在将其写入公共目录之前,可以通过使用GD或imagick处理图像来解决

  • 创建一个目录,您将在该目录下创建运行时目录,例如
    app/mydirs
    ,并将其添加到vcs历史记录中

  • 将目录添加到部署配置:

    set :shared_children,     [app_path + "/logs", web_path + "/uploads", "vendor", app_path + "/mydirs"]
    set :writable_dirs,     ["app/cache", "app/logs", "app/mydirs"]
    
  • 更改代码以使用此目录:

    $dir = $kernelDir . '/mydirs/newfolder/';// kerneldir is %kernel.root_dir%
    $fs=new Filesystem();
    $fs->mkdir($dir);
    
  • 解释其“自动”功能:

    用于设置权限。它不会更改目录的所有权。
    权限将在部署时应用,并且仅影响已存在的目录

    关于可写公共目录的安全问题:


    用户上传的文件不应被信任。将文件上载到公共目录会解锁许多可能的漏洞,必须非常小心。对于上传的头像,在将其写入公共目录之前,可以通过GD或imagick处理图像来解决问题。

    尽量避免使公共目录可写,除非你有足够的理由这样做。好吧,这就是我试图避免的。问题是怎么做?
    $dir=$kernelDir'/web/newfolder/'之外的任何其他目录
    。为您的内容创建一个专用目录,并应用与缓存目录相同的方法:我正在考虑这个问题,但如果以后我想将一些文件夹放在其他位置或决定更改结构,我也需要更改权限。这很有趣,因为在windows+xampp上这是开箱即用的。请阅读链接后面的文档。它是如何设置缓存和日志目录权限的分步指南。对自定义目录执行相同的步骤。除非有充分的理由这样做,否则尽量避免使公共目录可写。好吧,这就是我要避免的。问题是怎么做?
    $dir=$kernelDir'/web/newfolder/'之外的任何其他目录
    。为您的内容创建一个专用目录,并应用与缓存目录相同的方法:我正在考虑这个问题,但如果以后我想将一些文件夹放在其他位置或决定更改结构,我也需要更改权限。这很有趣,因为在windows+xampp上这是开箱即用的。请阅读链接后面的文档。它是如何设置缓存和日志目录权限的分步指南。对自定义目录执行相同的步骤。我使用的是使用GD的SonatamaDiabundle。然而,拥有公共资源比通过控制器为其提供服务更有意义。它只是更快。我和你一样,只是在公用文件夹里。我在想也许还有别的方法。我用的是SonataMediaBundle,它使用GD。然而,拥有公共资源比通过控制器为其提供服务更有意义。它只是更快。我和你一样,只是在公用文件夹里。我在想也许还有别的办法。