2013-05-04 183 views
5

我尝试使用PHP本地主机/ PhpProject3/create.php创建新的文件夹:PHP不创建该文件夹的mkdir()

<?php mkdir('newdir', 0777); ?> 

但是这个代码不这样做。它也不起作用:

<?php mkdir('/var/www/PhpProject3/newdir',0777); ?> 

我安装了LAMP。我认为问题出在设置(也许是chmod?),因为PHP脚本可以工作。例如我创建简单的test.php:

<?php echo 'Great'; ?> 

并运行它:localhost/PhpProject3/test.php结果是伟大的。

我使用Netbeans。 这里是文件:/ var/www/PhpProject3。 我运行它:本地主机/ PhpProject3/... 的内容的/ etc/apache2的/网站可用/默认:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www 
    <Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
    </Directory> 
    <Directory /var/www/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride None 
     Order allow,deny 
     allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Order allow,deny 
     Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    Alias /doc/ "/usr/share/doc/" 
    <Directory "/usr/share/doc/"> 
     Options Indexes MultiViews FollowSymLinks 
     AllowOverride None 
     Order deny,allow 
     Deny from all 
     Allow from 127.0.0.0/255.0.0.0 ::1/128 
    </Directory> 

</VirtualHost> 

我也可以不使用触摸创建文件()。

任何人都可以帮助我吗?

+0

很可能你不允许在那里写信,通常不允许web服务器写入它所服务的目录或文件(出于很好的理由)。如果你需要一个可写目录,你需要明确地做一个chmod来让Web服务器在那里写。只是不要在服务器的根目录下执行,而应该尽可能详细地指定一个子目录。 – 2013-05-04 11:53:55

回答

9

你的网络服务器运行的是哪个用户?你可以看到,如果你写

ps aux 

并看看。这可能是用户www-data(如果你使用ubuntu)。

然后,您将dir指向该用户,并授予用户对该目录的写入权限。

CHOWN WWW的数据/无功/网络/ PhpProject3

CHMOD U + W /无功/网络/ PhpProject3

一种替代方法是代替使用组权限。

chgrp命令WWW的数据/无功/网络/ PhpProject3

CHMOD克+ W /无功/网络/ PhpProject3

假设web服务器运行作为组www-data。

+0

干得好男人!谢谢 – user1518451 2013-05-04 12:04:46

+0

它的工作原理,但我不能在Netbeans中创建新的PHP文件。如何更改chmod以在没有root权限的情况下创建,删除和编辑文件? – user1518451 2013-05-04 12:42:34

+0

不可能,如果你不是root,你可以使目录全部可写,如果你敢,它的chmod a + w thedir – 2013-05-04 13:54:35

2

很难猜到什么是真正的问题,我假设宽容或路径问题。你应该检查返回值mkdir()

if(!mkdir()) { 
    print_r(error_get_last()); 
} 

此外,你应该学习启用错误消息。如果失败,mkdir()会触发一个。它们在默认情况下被禁用,因为它可能是生产系统中的安全风险。但是,当你正在开发你必须启用它们。您可以在开发系统的php.ini启用:

的php.ini

... 
display_errors=1 
... 
log_errors=1 
... 
error_log="/path/to/writable/file" 
... 
error_reporting=E_ALL 

修改php.ini后不要忘记重新启动Web服务器。

-2

存在的CentOS 7,这是非常恼人的,有时用PHP尤其是mkdir命令

禁用此行为私人临时位置,可以设置PrivateTmp =假在/ usr/lib中/ systemd /系统/ httpd的.service

then systemctl daemon-reload; systemctl restart httpd

HTH。