Log in

View Full Version : fopen, rewind, and feof errors



benslayton
01-15-2008, 04:40 AM
I am getting this error:

Warning: fopen(_users/admin/userpwd.php) [function.fopen]: failed to open stream: No such file or directory in C:\wamp\www\login\common.php on line 14

Warning: rewind(): supplied argument is not a valid stream resource in C:\wamp\www\login\common.php on line 15

Warning: feof(): supplied argument is not a valid stream resource in C:\wamp\www\login\common.php on line 17

Warning: fgets(): supplied argument is not a valid stream resource in C:\wamp\www\login\common.php on line 18

Here is the Code: I think it has something to do with the rewind().... Anyone know a fix?

<?php

session_start();

function registerUser($user,$pass1,$pass2){
$errorText = '';

// Check passwords
if ($pass1 != $pass2) $errorText = "Passwords are not identical!";
elseif (strlen($pass1) < 6) $errorText = "Password is to short!";

// Check user existance
$pfile = fopen("_users/" . $user . "/details.php","a+");
rewind($pfile);

while (!feof($pfile)) {
$line = fgets($pfile);
$tmp = explode(':', $line);
if ($tmp[0] == $user) {
$errorText = "Sorry, the selected user name is taken!";
break;
}
}

// If everything is OK -> store user data
if ($errorText == ''){
// Secure password string
//$userpass = md5($pass1);
$userpass = $pass1;

fwrite($pfile, "\r\n$user:$userpass");
}

fclose($pfile);


return $errorText;
}

function loginUser($user,$pass){
$errorText = '';
$validUser = false;

// Check user existance
$pfile = fopen("_users/" . $user . "/details.php","r");
rewind($pfile);

while (!feof($pfile)) {
$line = fgets($pfile);
$tmp = explode(':', $line);
if ($tmp[0] == $user) {
// User exists, check password
if (trim($tmp[1]) == trim($pass)){
$validUser= true;
$_SESSION['userName'] = $user;
}
break;
}
}
fclose($pfile);

if ($validUser != true) $errorText = "Invalid username or password!";

if ($validUser == true) $_SESSION['validUser'] = true;
else $_SESSION['validUser'] = false;

return $errorText;
}

function logoutUser(){
unset($_SESSION['validUser']);
unset($_SESSION['userName']);
}

function checkUser(){
if ((!isset($_SESSION['validUser'])) || ($_SESSION['validUser'] != true)){
header('Location: login.php');
}
}

?>

benslayton
01-15-2008, 05:56 AM
here is the new code:


<?php

session_start();

function registerUser($user,$pass1,$pass2){
$errorText = '';

// Check passwords
if ($pass1 != $pass2) $errorText = "Passwords are not identical!";
elseif (strlen($pass1) < 6) $errorText = "Password is to short!";

// Secure password string
//$userpass = md5($pass1);
$userpass = $pass1;

// Check user existance

$userDir = "_users/" . $user;
$filename = $userDir . "/config.php";
$open = fopen($filename, 'w+');
$data = "Jane Doe\n";
fwrite($open, $data);

if (is_dir($userDir)) {
echo ("Sorry, but the username is taken.");
}
else
{
//fwrite($userDir . $filename, "$user:$userpass");
fwrite($open, $data);
}

fclose($open);


return $errorText;
}

function loginUser($user,$pass){
$errorText = '';
$validUser = false;

// Check user existance
$userDir = fopen("_users/" . $user . "/details.php","r");
rewind($userDir);

while (!feof($userDir)) {
$line = fgets($userDir);
$tmp = explode(':', $line);
if ($tmp[0] == $user) {
// User exists, check password
if (trim($tmp[1]) == trim($pass)){
$validUser= true;
$_SESSION['userName'] = $user;
}
break;
}
}
fclose($userDir);

if ($validUser != true) $errorText = "Invalid username or password!";

if ($validUser == true) $_SESSION['validUser'] = true;
else $_SESSION['validUser'] = false;

return $errorText;
}

function logoutUser(){
unset($_SESSION['validUser']);
unset($_SESSION['userName']);
}

function checkUser(){
if ((!isset($_SESSION['validUser'])) || ($_SESSION['validUser'] != true)){
header('Location: login.php');
}
}

?>

codeexploiter
01-15-2008, 07:23 AM
I think not all the stream are seekable using rewind/fseek. But i think you can find some method to make a stream seekable in http://www.php.net website.

benslayton
01-15-2008, 07:18 PM
yes, i fixed it last night. Thanks though.