Setting PHP tmp dir - PHP upload not working

后端 未结 6 1868
北海茫月
北海茫月 2020-11-28 05:38

I\'m working on file upload via a webpage with a progress bar using Valums file uploader. Almost everything works fine, but I\'m not able to change the default tmp directory

相关标签:
6条回答
  • 2020-11-28 05:42

    The problem described here was solved by me quite a long time ago but I don't really remember what was the main reason that uploads weren't working. There were multiple things that needed fixing so the upload could work. I have created checklist that might help others having similar problems and I will edit it to make it as helpful as possible. As I said before on chat, I was working on embedded system, so some points may be skipped on non-embedded systems.

    • Check upload_tmp_dir in php.ini. This is directory where PHP stores temporary files while uploading.

    • Check open_basedir in php.ini. If defined it limits PHP read/write rights to specified path and its subdirectories. Ensure that upload_tmp_dir is inside this path.

    • Check post_max_size in php.ini. If you want to upload 20 Mbyte files, try something a little bigger, like post_max_size = 21M. This defines largest size of POST message which you are probably using during upload.

    • Check upload_max_filesize in php.ini. This specifies biggest file that can be uploaded.

    • Check memory_limit in php.ini. That's the maximum amount of memory a script may consume. It's quite obvious that it can't be lower than upload size (to be honest I'm not quite sure about it-PHP is probably buffering while copying temporary files).

    • Ensure that you're checking the right php.ini file that is one used by PHP on your webserver. The best solution is to execute script with directive described here http://php.net/manual/en/function.php-ini-loaded-file.php (php_ini_loaded_file function)

    • Check what user php runs as (See here how to do it: How to check what user php is running as? ). I have worked on different distros and servers. Sometimes it is apache, but sometimes it can be root. Anyway, check that this user has rights for reading and writing in the temporary directory and directory that you're uploading into. Check all directories in the path in case you're uploading into subdirectory (for example /dir1/dir2/-check both dir1 and dir2.

    • On embedded platforms you sometimes need to restrict writing to root filesystem because it is stored on flash card and this helps to extend life of this card. If you are using scripts to enable/disable file writes, ensure that you enable writing before uploading.

    • I had serious problems with PHP >5.4 upload monitoring based on sessions (as described here http://phpmaster.com/tracking-upload-progress-with-php-and-javascript/ ) on some platforms. Try something simple at first (like here: http://www.dzone.com/snippets/very-simple-php-file-upload ). If it works, you can try more sophisticated mechanisms.

    • If you make any changes in php.ini remember to restart server so the configuration will be reloaded.

    0 讨论(0)
  • 2020-11-28 05:43

    In my case, it was the open_basedir which was defined. I commented it out (default) and my issue was resolved. I can now set the upload directory anywhere.

    0 讨论(0)
  • 2020-11-28 05:45

    I struggled with this issue for a long time... My solution was to modify the php.ini file, in the folder that contained the php script. This was important, as modifying the php.ini at the root did not resolve the problem (I have a php.ini in each folder for granular control). The relevant entries in my php.ini looked like this.... (the output_buffering is not likely needed for this issue)

    output_buffering = On 
    upload_max_filesize = 20M 
    post_max_size = 21M
    
    0 讨论(0)
  • 2020-11-28 05:46

    My problem was selinux...

    Go sestatus

    If Current mode: enforcing

    Then chcon -R -t httpd_sys_rw_content_t /var/www/html

    0 讨论(0)
  • 2020-11-28 05:54

    I was also facing the same issue for 2 days but now finally it is working.

    Step 1 : create a php script file with this content.

    <?php 
     echo 'username : ' . `whoami`;
     phpinfo();
    ?>
    

    note down the username. note down open_basedir under core section of phpinfo. also note down upload_tmp_dir under core section of phpinfo.

    Here two things are important , see if upload_tmp_dir value is inside one of open_basedir directory. ( php can not upload files outside open_basedir directory ).

    Step 2 : Open terminal with root access and go to upload_tmp_dir location. ( In my case "/home/admin/tmp". )

      => cd /home/admin/tmp
    

    But it was not found in my case so I created it and added chown for php user which I get in step 1 ( In my case "admin" ).

      => mkdir /home/admin/tmp
      => chown admin /home/admin/tmp
    

    That is all you have to do to fix the file upload problem.

    0 讨论(0)
  • 2020-11-28 06:01

    create php-file with:

    <?php
        print shell_exec( 'whoami' );
    ?>
    

    or

    <?php echo exec('whoami'); ?>
    

    try the output in your web-browser. if the output is not your user example: www-data then proceed to next step

    open as root:

    /etc/apache2/envvars

    look for these lines:

    export APACHE_RUN_USER=user-name

    export APACHE_RUN_GROUP=group-name

    example:

    export APACHE_RUN_USER=www-data

    export APACHE_RUN_GROUP=www-data

    where:

    username = your username that has access to the folder you are using group = group you've given read+write+execute access

    change it to:

    export APACHE_RUN_USER="username"

    export APACHE_RUN_GROUP="group"

    if your user have no access yet:

    sudo chmod 775 -R "directory of folder you want to give r/w/x access"

    0 讨论(0)
提交回复
热议问题