...

View Full Version : Resolved getting post and session in a file



durangod
10-05-2012, 07:00 AM
Hi, now that my site is populated i cant just quickly sneak a peak at the session or post like i used to with live customers on the site.

So im wanting to learn how to print_r to a file rather than to the browser, that way i can troubleshoot without interferring with members visits.

Thanks.

If i cant get this working right i will come back and let you all know whats up, but i dont want to just come here first, i want to figure it out or try like heck to figure out the issue im having with the session.
More later if i hit a dead end.

Hope i can learn how to do a file rather than a browser display so i can start on this troubleshooting, thanks.

kbluhm
10-05-2012, 07:30 AM
Use the second argument to return rather than print:


file_put_contents(
'./print_r.' . date( 'YmdHis' ) . '.txt',
print_r( $var, TRUE )
);

durangod
10-05-2012, 07:43 AM
file_put_contents(
'./print_r.' . date( 'YmdHis' ) . '.txt',
print_r( $_SESSION, TRUE )
);




so that would put it in print_rwhatever the date is.txt

right.. and it would write it in the same folder i am in currently or the root?

kbluhm
10-05-2012, 08:09 AM
Yup, it'd add the current date/time with no punctuation, such as print_r.20121005020936.txt, where 20121005020936 is October 5th, 2012, 2:09:36am, and place it in the same folder as the current file.

You could also just hard code the file name as `print_r.txt` or whatever you'd like and continue to overwrite it if you plan on checking in on the file each and every refresh.

Or use session_id() for a per-user basis:


file_put_contents(
'./print_r.' . session_id() . '.' . date( 'YmdHis' ) . '.txt',
print_r( $_SESSION, TRUE )
);

...but that would add up to a lot of files in a short amount of time if it's a popular site. On the other hand, overwriting would have you missing out on a lot of data as each hit would wipe the previous data.

durangod
10-05-2012, 08:32 AM
well i thought i had it, it didnt work so i even tried something very very simple



$file = 'aaad_r.txt'; //this should put it at the very top of the file names(easy find)
$current = "hello there\n";
file_put_contents($file, $current);





i even created the file name first and ran this and the file is empty

checked every dir all the way back to the root and no file.

durangod
10-05-2012, 08:36 AM
Nevermin i got it, i changed the permissions of the file to 666 and whallla content ...

Thanks so much :)

tangoforce
10-05-2012, 01:49 PM
i cant just quickly sneak a peak at the session or post like i used to with live customers on the site.

durangod... yes you can. As always, php can do almost anything.. including storing session data to a database instead of a file. That then means you can (in your admin panel) pull out session data and make adjustments to it / see whats in it.

Run this in phpmyadmins SQL page:


CREATE TABLE `sessions` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`session` varchar(42) NOT NULL,
`data` text NOT NULL,
`created` int(11) NOT NULL,
`modified` int(10) unsigned NOT NULL DEFAULT '0',
`closed` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=260 DEFAULT CHARSET=utf8


Now, here is sessions.class.php:


<?php
class FileSessionHandler
{
protected $savePath;
protected $sessionName;

function open($savePath, $sessionName)
{
$this->savePath = $savePath;
$this->sessionName = $sessionName;
}

function close()
{
//
}

function read($id)
{
$Query = "select * from sessions where `session` = '$id' and `closed` = '0'";

if (($Result = mysql_query($Query)) and (mysql_num_rows($Result)))
{
$Row = mysql_fetch_array($Result);
$_SESSION = unserialize($Row['data']);
}
else
{
$_SESSION = array();
}
}

function write($id, $data)
{
$data = mysql_real_escape_string(serialize($_SESSION));
$Time = time();

$Query = "update sessions set `data` = '$data', `modified` = '$Time' where `session` = '$id' and `closed` = '0'";
mysql_query($Query);

if (!mysql_affected_rows())
{
$Time = time();
$Query = "insert into sessions (`session`, `data`, `created`) values ('$id', '$data', '$Time')";
mysql_query($Query);
}
}

function destroy($id)
{
$Time = time();
$Query = "update sessions set `closed` = '$Time' where `session` = '$id'";
mysql_query($Query);
}

function gc($maxlifetime)
{
//
}
}

$handler = new FileSessionHandler();
session_set_save_handler
(
array($handler, 'open'),
array($handler, 'close'),
array($handler, 'read'),
array($handler, 'write'),
array($handler, 'destroy'),
array($handler, 'gc')
);

// the following prevents unexpected effects when using objects as save handlers
register_shutdown_function('session_write_close');
?>


Now here is the way to handle a session in a script:


include('mysql.php');
include('sessions.class.php'); //Note you need mysql connection for this

session_start();


You're a smart guy, you'll see how to modify the table to link it to your users accounts. Then once thats done you can simply use your admin pages to inspect / change the session data and put it back into the database using serialize and unserialize functions.

Of course if you really want... you can always use code to open each users session file on the disk instead... but that really is a bit more complex.

durangod
10-05-2012, 07:16 PM
Very nice tango thanks so much, above and beyond the call of duty, thanks for that. And thanks for the compliment i am proud of some of the things i have done and things i have overcome but then again i have those days where i feel like a third grader trying to figure out how to use a calculater lol... :)


Such as my current issue as to why if using sessions which is suppose to be a superglobal and should be available anywhere in the script. Then why when i do


$_SESSION['AdminArea'] = 'online';

does it not show up when i look at $_SESSION, its driven me nuts lol... but ill figure it out eventually, hopefully before all my hair is gone lol



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum