我尝试使用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()创建文件。
任何人都可以帮助我吗?
答案 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。