配置临时目录


48

我最近将站点从本地主机移到了VPS。我设法使公共文件和私人文件可写;但是,我不确定在哪里可以找到临时文件夹以及如何更改权限。我不断收到此消息:

由于目标目录配置不正确,无法复制指定的文件“临时:// file3Hl91E”。这可能是由文件或目录权限问题引起的。系统日志中提供了更多信息。

我正在使用Virtualmin,Drupal 7和Debian服务器。我当前的临时目录是/tmp

Answers:


46

检查管理员->配置->媒体->文件系统以个性化您的tmp路径。确保使用相对路径并对Apache用户具有正确的特权。

我个人喜欢本文修复文件上传。他有很好的观察力。它为我工作。

最近,我将网站下载到了我的Mac计算机上。碰巧我在Mac上使用的mod_userdir是Apache,却忘记了/etc/apache2/users/nameofuser.conf需要设置AllowOverride All,否则我将收到以下消息:

由于目标目录配置不正确,无法复制指定的文件临时文件。


包含的链接已关闭
pal4life

链接回来了!作者请放回该网站!
cayerdis

2
最好在答案中添加这些“观察结果”的综合。
FIFI Finance

4
链接再次断开。
KariKääriäinen15年


17

在您的settings.php中

$conf['file_temporary_path'] = '/tmp';

这将99%的时间在UNIX系统上运行。

通常,/ tmp目录存在于具有打开权限的UNIX系统上,并且专门存在于临时文件中,并且通常将其设置为提高性能。

您可以通过ls -al /tmp在命令行上运行来检查权限。

如果您有兴趣进一步阅读,请参阅https://en.wikipedia.org/wiki/Temporary_folder


1
我认为这并不是一个很好的答案。没有任何解释,如果/tmp没有正确的权限,则可能无法正常工作。它甚至与公认的答案相矛盾(这本身也不是很好)。
菲菲金融

我认为答案不需要太多解释,我想说的是$ conf变量在settings.php中的工作方式是Drupal开发人员的常识。关于这个答案的好处之一是它很简洁。我不确定是否与已接受的答案相抵触,已接受的答案会起作用,这是另一种选择。此方法与通过UI进行操作之间的区别在于,此方法可在多个环境中使用,但是您必须针对每种环境在UI中分别进行设置。
chim

16

重要的是要了解,权限问题可能同时存在于您指定的临时目录(在admin / config / media / file-system中定义)以及要复制该临时文件的文件夹中。我已经看到了这个错误了几次,它通常是不与临时文件夹的问题,但如果该文件被复制的最后文件夹后,居住在临时文件夹。

另外,请确保正确设置了公共文件系统路径。


1
对我来说就是这种情况。就我而言,我需要将新创建的/ sites / default / files目录的所有权设置为USERNAME:apache(在某些系统上,该组将被称为nobody)。
埃文·多诺万

8

我遇到了这个确切的问题,并确保按照建议的方式将tmp文件夹的位置使用相对路径(sites / default / files / tmp),并且我还更改了tmp文件夹的权限以确保它可以被apache写入,但我的问题仍然存在。因此,我决定查看日志消息(“报告” >>“最近的日志消息”),以查看是否可以更好地了解问题所在。通过这样做,我得到了更具体的消息:

无法在public:// js上设置文件许可权。

这促使我检查了site / default / files中js文件夹的权限,结果发现apache无法写入该文件,因此通过将该文件夹的权限更改为775,我摆脱了我的错误消息。因此,我建议您检查站点/默认目录/文件中所有子文件夹的权限,如果尚未解决问题,则不仅要检查tmp文件夹。只是以为我会分享此信息。


我的问题与此相同,但我使用以下纠正它:sudo chgrp -R www-data / var / www / mysite
Wavesailor 2014年

假设您正在sudo chgrp -R www-data /var/www/mysite“将权限更改为775”结合在一起。这不是必要的。Drupal不需要写入每个文件夹。仅您的公共,私有和tmp文件文件夹。
rovr138'1/

是的-这里没有提到其他答案的关键是找到目标目录(通常在sites / default / files下的某个位置-如果启用了JS / CSS串联,则/ css和/ js是主要候选对象),并且可以仅通过查看日志即可获得。
威廉·

…*但是*-管理表单上的标签上写着“该目录不能通过网络访问。”,因此除非您已采取措施在Apache或Nginx中保护/ sites / default / files / tmp,然后将其放置有一个坏主意。
威廉·特雷尔

5

您可以将文件系统设置admin/config/media/file-system 更改为/ tmp

您也可以检查管理员/报告/状态是否存在任何设置问题

关于/ tmp权限,您可以给它755,您将在/ public_html中找到它


2

该错误信息可能导致软件误导

如果它说问题出在目标目录上,则说明该Apache可能无权写入Drupal希望将文件放入的sites / default / files子文件夹。

一个好的解决方案是使apache用户成为site / default / files下所有文件和目录的所有者。

cd /path/to/sites/default
sudo chown -R _www:_www files

或类似的东西应该解决目标目录问题。仔细检查所有者对所有子目录具有写和执行权限。


1
这个解决方案挽救了我的一天,我正在使用Ubuntu 14.014并做到了chown -R www-data:www-data /var/www/html/sites/default/files/
Rishi Kulshreshtha 2015年

2

files目录:对基于Apache的Web服务器进行故障排除

如果目录文件不是Web服务器“拥有”的,则有两种处理方法。这些说明假定您具有对Web服务器的Shell访问权限。如果您没有外壳程序访问权限,请与您的主机提供商联系以获取其他支持。

理想情况下,您将能够更改目录文件的“所有者”以匹配Web服务器的名称。在基于Unix或Linux的服务器上,您可以通过发出以下命令来验证Web服务器运行的“身份”:

$ ps aux  |grep apache # for Apache 2.x
$ ps aux  |grep httpd # for Apache 1.x

根据您的Web服务器,这些命令之一将返回如下几行:

www-data 13612  0.1  0.9  50640 20340 ? S 12:29   0:08 /usr/sbin/apache2 -k start

返回的文本中的第一列是Web服务器作为其运行的“用户”。在这种情况下,用户为www-data。要使文件目录可被Web服务器写入,您需要使用以下命令重新分配其所有权:

$ chown -R www-data sites/default/files
$ chmod -R 0700 sites/default/files

如果您在服务器上没有足够的权限来更改文件夹的所有权,那么下一个最佳选择是使用以下命令提供对文件夹的组写访问:

$ chmod -R 0770 sites/default/files

如上所述,您还应该能够使用FTP程序来调整目录的权限。

完成这些步骤后,请导航至管理->报告->状态报告,以确认已分配了适当的权限。滚动到标有“文件系统”的部分,并确认您的设置现在正确。

来源:文件目录


1

另一个错误源是它无法写入文件文件夹。就我而言,我使用以下方法解决了它:

$chmod 777 sites/default/files/pictures/

15
哇,真的吗?777显然在生产现场上?那只是不负责任的建议。
大卫·梅斯特

是的,至少给它755。
user1359

@DavidMeister我为您投票,但不幸的是在共享主机上(呕吐),有时777是Apache写入文件夹的唯一方法

@andrewtweber您确定吗?即使在共享的托管环境中,775也应该和您需要的一样宽松。您能否举一个需要777的共享托管服务提供商的示例?如果您在共享服务器上使用777并且没有VPS,则服务器上的其他所有人都可以访问您的文件。
David Meister 2014年

3
@andrewtweber还不错,教训不在于“共同主办的”要求777,但“惨不忍睹托管”需要777
大卫·梅斯特

1

在某些情况下,可以通过删除default / files中的'ctools'和'js'文件夹轻松解决此问题。如果需要,这些文件夹将由系统重新创建。有时,在对现有站点进行新安装时,这些现有文件夹已经引起问题。另外,如果在重新安装现有站点之后CSS无法正常工作,则也可以通过删除这些文件并让drupal重新创建它们来解决。


0

我的旧旧配置有问题

chmod 664 -R /var/drupal-bc/sites/default/files
chmod 664 -R /var/drupal-bc/sites/default/private

drw-rw-r-- 2 www-data www-data  4096 Jul 31 12:35 files
drw-rw-r-- 3 www-data www-data  4096 Jul  5 15:08 private

我的新工作正常配置

chmod 774 -R /var/drupal-bc/sites/default/files
chmod 774 -R /var/drupal-bc/sites/default/private

drwxrwxr-- 2 www-data www-data  4096 Jul 31 12:35 files
drwxrwxr-- 3 www-data www-data  4096 Jul  5 15:08 private

是的,需要在文件夹上执行才能使用它们。775比774更合适。在您设置所有权的方式下,755也是一个不错的选择。
rooby

0

临时文件夹的正确权限取决于您的Web服务器配置。

如果使用PHP作为Web服务器的模块(例如Apache)运行Drupal,则在使用User指令在主Web服务器配置文件中定义的用户时,应具有写入权限。

%grep -i“用户” /etc/httpd/conf/httpd.conf

用户apache


0

从一台服务器移到另一台服务器后,我遇到了同样的问题。

我尝试了这里建议的所有内容,将文件夹设置为755,依此类推。

我的临时文件夹设置为““ tmp7zXhVVCO”,它实际上很好地复制了安装文件,每次重试后,我看到临时文件都复制到了那里,但是安装一直失败。

但是问题是所有者而不是权利,这就是为什么777消除了此错误,但是我们都知道这不是在生产现场进行的方式。

您应该做的是将临时文件夹更改为其他任何文件,例如“ temp”或适合您的文件,只要尚不存在,drupal就会使用apache权限(而不是 用户权限)创建新文件夹,并且您的问题将得到解决。


当我这样做时,我会得到错误The directory ../temp2 does not exist and could not be created.
Paul Trotter

0

我真的不喜欢任何现有的答案,所以我将自己开始,我可能会随着时间的推移而更新。主要使用shell命令。

现在,从运行sites/example.com

MYSITE=example.com
FILES=sites/$MYSITE/files  
# CSS and JS might also cause trouble and advagg has its own dirs
TMPDIRS=$FILES/tmp $FILES/js $FILES/css $FILES/advagg_*
drush vset file_temporary_path $FILES/tmp # seems better than using /tmp
drush vset file_directory_temp $FILES/tmp
cd $(drush drupal-directory)   
chown www-data -R $TMPDIRS
chmod 755 -R $TMPDIRS

0

从配置->媒体->文件系统,我删除了/ temp-catalogue。之后,我没有任何问题。


0

关于迁移,我也遇到了同样的问题。我有chmod 777所有站点/默认文件/文件,但错误仍然发生。我在站点/默认值/文件上更改了权限775,消息消失了。我不是私人路径问题,我的是/ var / tmp,但是是775许可。


0

如果您使用Pantheon遇到了此问题,并且在设置了(临时)文件目录路径后继续出现错误,则可能还需要将开发实例仪表板上的“连接”模式从Git切换到SFTP。

您的Drupal网站可能正在尝试将文件保存到Git管理的目录中(例如,如果您要更改“自适应主题”主题中的布局设置等)。为此,请切换到SFTP。保存文件后,您可以切换回Git,仪表板将提示您提交在服务器上所做的更改。


0

我有同样的问题。

我在Windows中使用IIS。最后,问题出在文件夹sites / default / files中,以及显然在sites / default / files / tmp中的权限。

最终,我再次为文件夹赋予了“完全权限”,并且它起作用了。

问候

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.