user1518451
user1518451

Reputation: 1845

PHP don't create the folder mkdir()

I trying create new folder using PHP localhost/PhpProject3/create.php:

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

but this code doesn't do it. It also doesn't work :

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

I installed LAMP. I think the problem is in the settings (maybe chmod ?) because PHP script works. For example i create simple test.php:

<?php echo 'Great'; ?>

and run it: localhost/PhpProject3/test.php the result is Great.

I use Netbeans. Here are files: /var/www/PhpProject3 . I run it: localhost/PhpProject3/... The content of /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>

I also can't create file using touch().

Can anyone help me ?

Upvotes: 5

Views: 19158

Answers (3)

Raymond Henick
Raymond Henick

Reputation: 1

there is a private temp location in centos 7 that is very annoying sometimes with php especially the mkdir command

To disable this behavior, you can set PrivateTmp=false in /usr/lib/systemd/system/httpd.service

then systemctl daemon-reload; systemctl restart httpd

HTH.

Upvotes: -2

hek2mgl
hek2mgl

Reputation: 158250

Hard to guess whats really the problem, I assume permissons or path problems. You should check the return value of mkdir():

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

Further you should learn enable error messages. mkdir() would trigger one if it fails. They are disabled by default as it could be a security risk in a production system. But when you are developing you MUST enable them. You can enable it in the php.ini of development system:

php.ini:

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

After modifying the php.ini don't forget to restart the web server.

Upvotes: 3

Anders Lind&#233;n
Anders Lind&#233;n

Reputation: 7322

Which user does your webserver run as? You can see that if you write

ps aux

and take a look. It is probably the user www-data (if you use ubuntu).

Then you chown the dir to that user and give the user write permissions to the directory.

chown www-data /var/www/PhpProject3

and

chmod u+w /var/www/PhpProject3

An alternative is to instead use group permissions.

chgrp www-data /var/www/PhpProject3

and

chmod g+w /var/www/PhpProject3

assuming the webserver runs as group www-data.

Upvotes: 13

Related Questions