PHP不创建文件夹mkdir()

时间:2013-05-04 11:48:53

标签: php apache

我尝试使用PHP localhost / PhpProject3 / create.php创建新文件夹:

<?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。 我运行它:localhost / PhpProject3 / ... / etc / apache2 / sites-available / default的内容:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    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>

我也无法使用touch()创建文件。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:11)

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

ps aux

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

然后你将dir chown给该用户并授予用户对该目录的写权限。

  

chown www-data / var / www / PhpProject3

  

chmod u + w / var / www / PhpProject3

另一种方法是使用组权限。

  

chgrp www-data / var / www / PhpProject3

  

chmod g + w / var / www / PhpProject3

假设网络服务器以组www-data运行。

答案 1 :(得分: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 :(得分:-2)

在centos 7中有一个私有临时位置,有时候非常讨厌php,尤其是mkdir命令

要禁用此行为,您可以在/usr/lib/systemd/system/httpd.service

中设置PrivateTmp = false

然后是systemctl daemon-reload; systemctl重启httpd

HTH。