webForumDet fria alternativet

Vad betyder felet?

PHP

27 svar · 476 visningar · startad av filipbh

Medlem sedan juli 2002405 inlägg
Frågan#1

Vad menas med detta fel?

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 11520 bytes) in /customers/httpd.www/check.php on line 17

Någon som vet ett bra sätt göra en koll om sessioner finns? Finns de kan man besöka sidan. Annars kommer det upp en text och en automatisk vidarelänkning till index.php görs.. Har försökt med två olika men inget fungerar.

Medlem sedan aug. 20002 975 inlägg
#2

Felmeddelandet betyder att de 8MB internminne ditt skript är tilldelat av webbservern är överskridet.
Kan hända ibland när man kör GD mot stora bilder eller liknande.

För t.ex en inloggningskontroll brukar jag göra följande.
När någon loggar in sätts en sessionsvariabel, låt oss kalla den $_SESSION['variabel'].
Sedan på varje sida som ska skyddas med inloggning använder jag följande:

<?php

session_start();

if (!isset($_SESSION['variabel'])) {
   header("Location: index.php");
   exit;
}

Det borde fungera med något liknande för din del.

Medlem sedan juli 2002405 inlägg
#3

Okej, ska testa att lägga till kod så sessionerna verifieras som rätt också..

Tack så länge

Medlem sedan juli 2002405 inlägg
#4

Man loggas ut direkt när man försöker logga in =(

Gjorde koden så här:

<?session_start();?>

<?
if (!isset($_SESSION['inl_user'])) {
               echo("<script language=JavaScript>");
               echo("self.location.replace('index.html')");
               echo("</script>");
   exit;
}
?>

<?
if (!isset($_SESSION['inl_pass'])) {
               echo("<script language=JavaScript>");
               echo("self.location.replace('index.html')");
               echo("</script>");
   exit;
}
?>

<?
if (!isset($_SESSION['inl_id'])) {
               echo("<script language=JavaScript>");
               echo("self.location.replace('index.html')");
               echo("</script>");
   exit;
}
?>

Är det koden som är fel?

Medlem sedan aug. 20002 975 inlägg
#5

Sätter du alla tre sessionsvariablerna i din inloggning ?
Annars skickas du bara till index.html.

För felsök lägg följande överst i skriptet, före session_start():

<?php // <-- Översta raden längs till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start();
Medlem sedan juli 2002405 inlägg
#6

Ja.. De tre sätts vid inloggningen och det har inte varit problem med dem tidigare.

La in koden du skrev men det visas inget eftersom den länkas till index.html direkt.. Tar bort vidarelänkningen och ser om det kommer fram någon text.

Medlem sedan juli 2002405 inlägg
#7

Det här är koden:

<? // <-- Översta raden längs till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start();

?>

<?
if (!isset($_SESSION['inl_user'])) {
echo "user<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}
?>

<?
if (!isset($_SESSION['inl_pass'])) {
echo "pass<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}
?>

<?
if (!isset($_SESSION['inl_id'])) {
echo "id<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}
?>

och jag får detta:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /customers/httpd.www/db.php:2) in /customers/httpd.www/check.php on line 6

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /customers/httpd.www/db.php:2) in /customers/httpd.www/check.php on line 6
user

Egentligen bara att sessionen redan är startad typ

Medlem sedan juli 2002405 inlägg
#8

Tog bort session_start() men det kom inte fram något felmeddelande.. Bara "user". Bytte jag plats så att session[inl_pass] låg överst visades "pass". Behåller den inte värdena eller?

Medlem sedan aug. 20002 975 inlägg
#9

Du kan inte starta upp sessionen och hämta sessionsvariablerna eftersom du har en output till webbläsaren innan session_start().
Denna output sker på rad 2 i db.php.

session_start() är en header och måste sättas innan du gör någon output till webbläsaren.
Med output menas HTML-kod, echo eller print. Även ett mellanslag eller en radbrytning utan för PHP-taggarna genererar en output.

Detta gäller även för filer man inkluderar. Där får man se upp så där inte ligger något osynligt skräptecken efter den avslutande PHP-taggen.

Hur hänger dina filer check.php och db.php ihop ?

Medlem sedan juli 2002405 inlägg
#10

db.php innehåller bara två variabler med databasnamn och databaslösenord.. Använder det för att slippa skriva lösenordet och usern i varje mysql-hämtning. Kom på att db.php innehåller check. Kanske därför det inte fungerar.. La in den för att man inte ska kunna komma db (även om den inte skriver ut något) när man inte är inloggad. Ska jag ta bort check från db? Eller iaf flytta ner den?

Medlem sedan aug. 20002 975 inlägg
#11

Du har något på rad 2 i db.php som ger output.

Hur ser db.php ut ?
Maska eventuella lösenord mm.

Medlem sedan juli 2002405 inlägg
#12

Hur kan du se det?

För tillfället så här:


<?//require("check.php");?>

<?
$u = "";
$p = "";
?>
Medlem sedan aug. 20002 975 inlägg
#13
<?php // <-- Översta raden längs till vänster

require("check.php");

$u = "";
$p = "";
?>

Du bryter dig in och ut ur PHP och har radbrytningar emellan. Dessa genererar output.

Ska du inkludera db.php i en annan fil, tänk då på att du får inte ha någon output i den filen innan du inkluderar db.php.

Medlem sedan juli 2002405 inlägg
#14

Men det verkar ju konstigt att det ska vara fel i db.. Det står att det är line 9 i check som är fel. Dvs, första sessionsraden... Jobbigt när det aldrig kan fungera..

Medlem sedan aug. 20002 975 inlägg
#15

Hur ser dina filer ut nu, och hur ser felmeddelandet ut ?

Medlem sedan juli 2002405 inlägg
#16

Felmeddelande:

Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 9
pass

Check

<? // <-- Översta raden längs till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

?>

<?
if (!isset($_SESSION[inl_pass])) {
echo "pass<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}
?>

<?
if (!isset($_SESSION[inl_user])) {
echo "user<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}
?>

<?
if (!isset($_SESSION[inl_id])) {
echo "id<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}
?>

db

<?
require("check.php");
$u = "";
$p = "";
?>
Medlem sedan juli 2002405 inlägg
#17

...och inloggningsfilen

@session_start();
@session_register("inl_user");
@session_register("inl_id");
@session_register("inl_pass");
@$_SESSION['inl_user'] = $_POST['loginname'];
@$_SESSION['inl_pass'] = $_POST['loginpass'];
@$_SESSION['inl_id'] = $data[id];

Medlem sedan aug. 20002 975 inlägg
#18

Ta bort alla @ som spärrar felmeddelande. Koppla på all felsökning genom att lägga följande överst i dina skript:

<?php // <-- Översta raden längs till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

Tag bort det först då allt fungerar.

db.php

<?php // <-- Översta raden längs till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

require("check.php");
$u = "";
$p = "";

?>

check.php

<?php // <-- Översta raden längs till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start();

if (!isset($_SESSION['inl_pass'])) {
echo "pass<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}

if (!isset($_SESSION['inl_user'])) {
echo "user<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}

if (!isset($_SESSION['inl_id'])) {
echo "id<br>";
               //echo("<script language=JavaScript>");
               //echo("self.location.replace('index.html')");
               //echo("</script>");
   exit;
}
?>

inloggning

<?php // <-- Översta raden längs till vänster

error_reporting(E_ALL);
ini_set("display_errors", "1");

session_start()

// Diverse annan kod för att kolla inloggningsvariabler mm.

//Om allt är ok sätt sessionsvariablerna
$_SESSION['inl_user'] = $_POST['loginname'];
$_SESSION['inl_pass'] = $_POST['loginpass'];
$_SESSION['inl_id'] = $data['id'];
Medlem sedan juli 2002405 inlägg
#19

inloggning

Notice: A session had already been started - ignoring session_start() in /customers/httpd.www/check.php on line 6

Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 8
pass

Kommer inte vidare efter det.. Skriver jag en sida manuellt så kommer det fram:

Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 9
pass

Medlem sedan aug. 20002 975 inlägg
#20

Notice: A session had already been started - ignoring session_start() in /customers/httpd.www/check.php on line 6

session_start() finns någonstans tidigare i skriptet.
Inkluderar du db.php i någon fil som har session_start() ?

Notice: Use of undefined constant inl_pass - assumed 'inl_pass' in /customers/httpd.www/check.php on line 8
pass

Betyder att du saknar apostrofer/citationstecken runt ditt array-index. Du har sannolikt skrivit $_SESSION[inl_pass] istället för $_SESSION['inl_pass'].

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)