Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
PHP: FAQ - Manual
[go: Go Back, main page]

PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

General Information" width="11" height="7"/> <The future: PHP 6 and Zend Engine 3
Last updated: Sun, 25 Nov 2007

view this page in

FAQ: Frequently Asked Questions

Table of Contents



add a note add a note User Contributed Notes
FAQ
vlad-45 at voliacable dot com
15-Jan-2008 07:42
I spend too much time with session_set_save_handler() but could not use it.
I work with Apache/1.3.12 (Win32) PHP/5.1.2 in local mode, if it matters. I want to use handler destroy() but it does not
work. If I need to determine all handlers, then I have a problem with write().
Function write() does not want to create and open storage file. If file created outside the
function, it still would not be opened. Actually, write() refuses to create any file. But debug output shows
that write() was called and had all the necessary data.
This problem can be solved by removing of function write(). Session will create storage file and write
data in it. But function destroy() refuses to work in any case. (It's the only function I need.)
After closing of browser the storage file remains and file
temp (debug output) is absent.
Maybe closing of browser does not mean end of session (although next time the session id will be different),
but let's see how function write() works:

<?php
function open($save_path, $session_name)
{
  global
$sess_save_path;

 
$sess_save_path = $save_path;
  echo
"$session_name successfully opened<br>"; ////debug
 
 
return(true);
}

function
close()
{
  return(
true);
}

function
read($id)
{
  global
$sess_save_path;

 
$sess_file = "$sess_save_path/sess_$id";
  return (string) @
file_get_contents($sess_file);
}

function
write($id, $sess_data)
{ echo
"write begin<br>"; //////debug
global $sess_save_path;

$sess_file = "$sess_save_path/sess_$id";
 
echo
"$sess_file<br>"; ////debug
echo "$sess_data<br>"; /////debug
 
if ($fp = @fopen($sess_file, "w"))
  {
     
$return = fwrite($fp, $sess_data);
     
fclose($fp);
      return
$return;
  }
 else
   { echo
"did not open file for writing<br>"//////debug
     
return(false);
   }
}

function
destroy($id// works in no case
{
  global
$sess_save_path;
 
$f = @fopen("./tmp/temp", "w"); /////debug
 
$sess_file = "$sess_save_path/sess_$id";

  return(@
unlink($sess_file));
}

function
gc($maxlifetime)
{
  global
$sess_save_path;

  foreach (
glob("$sess_save_path/sess_*") as $filename) {
    if (
filemtime($filename) + $maxlifetime < time()) {
      @
unlink($filename);
    }
  }
  return
true;
}

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

session_save_path("./tmp"); // temporary storage
session_name("counter");

session_start();

//$id = session_id(); //If I use these 3 strings, file will be created,
//$sess_file = "$sess_save_path/sess_$id"; // but would not be opened by write() all the same.
//$fp = @fopen($sess_file, "w");  // file will be empty

if (!(session_is_registered("someVar"))) // new session
{ echo "someVar not registered<br>"; ////debug
session_register("someVar"); // session variable
$_SESSION["someVar"] = "someValue";
}
echo
"it still works<br>"; ////debug

?>

File temp was not created.
A storage file was not created and output in browser was as follows:

counter successfully opened
someVar not registered
it still works
write begin
./tmp/sess_a4bc6c82ab15635de77bd0c9c74b13d4
someVar|s:9:"someValue";
did not open file for writing

Who could explain this phenomenom?
langjairich at yahoo dot com
17-Dec-2006 06:41
Here's how I successfully installed PHP 5.2 with my IIS 5.1:

1) Install with the option: "IIS 4+ / ISAPI"
2) Install under folder "C:\PHP\"
3) Edit the file: "C:\WINDOWS\php.ini"
   Change "doc_root = " to "doc_root = c:\inetpub\"
4) Open IIS, right click on home page, properties.
   Click "home directory" tab.
   Click Configuration, look for the extension ".php".
   The executable path should be "C:\PHP\php5isapi.dll"
5) Restart IIS.

Enjoy. I had to learn the hard way. Took me 2 days.
adriaan at vannatijne dot nl
30-Jul-2005 12:48
A dutch FAQ;
www.yapf.net
A dutch site about PHP;
www.phpfreakz.nl
dennis1989 at web dot de
28-Sep-2004 11:56
A German FAQ: http://www.php-faq.de
philip at cornado dot com
31-Dec-2002 08:07
A lot of faqts here:
http://php.faqts.com/

 
show source | credits | sitemap | contact | advertising | mirror sites