Home  >  Article  >  Backend Development  >  Solution to a Permission denied Notice encountered by PHP using Session, permissionnotice_PHP tutorial

Solution to a Permission denied Notice encountered by PHP using Session, permissionnotice_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:21:40921browse

Solution to a Permission denied Notice encountered by PHP using Session, permissionnotice

If you use apt-installed PHP under ubuntu/Debian, you may encounter this prompt with a small probability when using Session.

Copy code The code is as follows:

PHP Notice: session_start(): ps_files_cleanup_dir:
opendir(/var/lib/php5) failed: Permission denied (13)
in /home/laruence/www/htdocs/index.php on line 22

This is because, in PHP, if you use file_handler as the save handler of Session, then there is a probability that the Gc process of Session will be run every time session_start.

Copy code The code is as follows:

//Omitted
int nrdels = -1;
nrand = (int) ((float) PS(gc_divisor) * php_combined_lcg(TSRMLS_C));
If (nrand < PS(gc_probability)) {
PS(mod)->s_gc(&PS(mod_data), PS(gc_maxlifetime), &nrdels TSRMLS_CC);
}
//Omitted

The reason for this warning is that in apt's PHP, the permissions of the session's default directory /var/lib/php5 are 733 with sticky bit, which is
Copy the code The code is as follows:
drwx-wx-wt root root

Generally, PHP workers run under non-root identities, so they do not have permission to open this folder (but because they can write, it does not affect normal Session file reading). So the following code in s_gc will Trigger the Notice mentioned at the beginning:
Copy code The code is as follows:

//For the file handler, s_gc indirectly calls ps_files_cleanup_dir:
dir = opendir(dirname);
If (!dir) {
​​​​ php_error_docref(NULL TSRMLS_CC, E_NOTICE,
"ps_files_cleanup_dir: opendir(%s) failed: %s (%d)",
             dirname, strerror(errno), errno);
        return (0);
}

Of course, under Ubuntu/Debian, there is still gc recycling, but it is done by an external cron process. The default is /etc/cron.d/php5:,
Copy code The code is as follows:

09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ]
&& [ -d /var/lib/php5 ] && find /var/lib/php5/
-type f -cmin +$(/usr/lib/php5/maxlifetime) -print0
| xargs -n 200 -r -0 rm

In addition, you can see that when judging whether s_gc is running, there are two key variables: PS (gc_divisor) and PS (gc_probability). These two variables respectively correspond to the two configuration items of the same name of the session's runtime configuration items:

session.gc_probability and session.gc_divisor, they default to 1 and 100 respectively.

And php_combined_lcg is a random number generator that generates random numbers in the range of 0 to 1, so the above judgment is equivalent to:

Copy code The code is as follows:

rand < probability / gc_divisor

In other words, by default, the gc process can be called almost once every 100 times. So there is a small probability that you will see this Notice.

To close this Notice, just set:

session.gc_probability = 0, just make s_gc completely impossible to run.

Of course, you can also change the permissions of this folder...


php session permission issue

The session saving path C:\WINDOWS\TEMP\ does not have development write permission for the web user

It means you do not have permission. Cannot use session_start to create session

Why does the server report session_start() Permission denied (13) error?

This error seems to be because the directory where the session file is stored does not have write permissions open to the apache user. To solve this problem, you only need to set session.save_path in the php configuration file php.ini to the temporary directory. Example: session.save_path = "/tmp/php5" Save php.ini and restart apache to take effect. Go to the Website Building Technology Learning Forum website to view the answer details>>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/854358.htmlTechArticleSolution to a Permission denied Notice encountered by PHP using Session, permissionnotice If under ubuntu/Debian, use apt installation PHP, then when using Session, you may...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:从CakePHP 1.3升级到2.5,cakephp1.3升级2.5_PHP教程Next article:PHP中设置一个严格30分钟过期Session面试题的4种答案,session4种_PHP教程

Related articles

See more