Win7 32-Bit / alles geht - Win7 64-Bit / vieles geht nicht

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Win7 32-Bit / alles geht - Win7 64-Bit / vieles geht nicht

Postby tebsu » 04. March 2011 20:57

Hi,

also ich hab eine webseite entwickelt unter Windows 7 32-Bit mit XAMPP. Diese hab ich immer mit meinem Server online synchronisiert, sodass ich bei beiden immer die selben Daten hatte. Nun hab ich vor ein paar Tagen Windows 7 64-Bit installiert und bekomme plötzlich irgendwelche PHP Fehler, die ich vorher nie hatte.


Hier ein Beispiel:

Notice: Undefined index: msg in C:\xampp\htdocs\webseite\index2.php on line 2

Notice: Undefined offset: 1 in C:\xampp\htdocs\webseite\functions.php on line 92

Notice: Undefined offset: 1 in C:\xampp\htdocs\webseite\functions.php on line 94

Zur ersten Meldung: "msg" entsteht aus $msg = $_GET['msg'];
Zur zweiten und dritten Meldung:

Hier sind die Zeilen 90 bis 95:
Code: Select all
$currentpagesplit = $_SERVER["REQUEST_URI"];
$currentpagesplit2 = explode('/webseite/',$currentpagesplit);
$currentpage = $currentpagesplit2[1];
$currentsitesplit = explode("url=",$currentpage);
$currentsitesplit2 = explode("&",$currentsitesplit[1]);
$currentsite = $currentsitesplit2[0];


dann verwende ich includes und er findet die dateien nicht, obwohl derselbe code auf dem server genau so funktioniert und auch vorher mit meinem 32Bit win funktioniert hat. Ich wette, es gäbe noch mehr Fehler, wenn zumindest der include funktionieren würde und ich mir die einzelnen Funktionen dann angucken könnte.
Jemand ne Idee?


meine error.log:

Image
tebsu
 
Posts: 4
Joined: 04. March 2011 20:47

Re: Win7 32-Bit / alles geht - Win7 64-Bit / vieles geht nic

Postby tebsu » 04. March 2011 21:45

problem solved by using version 1.7.3 (next time, i swear, i will search better). The include didnt work, because the split i used in my code had a mistake (i use a different folder name on my Win7 64-Bit than before)
tebsu
 
Posts: 4
Joined: 04. March 2011 20:47

Re: Win7 32-Bit / alles geht - Win7 64-Bit / vieles geht nic

Postby glitzi85 » 04. March 2011 21:50

Hi,

tebsu wrote:Jemand ne Idee?

Ja, ordentlich Programmieren lernen.

PHP scripte sollte man immer auf einem Server testen, auf dem auch E_NOTICE aktiviert ist. Dann sieht man auch die Fehler, die noch keine sind aber welche werden können.

Dein Problem ist, dass du Variablen verwendest ohne sie vorher zu prüfen. Was, wenn REQUEST_URI auf / steht, dann splittet dir explode gar nix und du kannst natürlich auch nicht auf das zweite Element des Arrays zugreifen (da es nur ein Element hat). Nach explode wäre es also sinnvoll zu prüfen, ob $currentpagesplit2 auch zwei elemente hat (am besten ob es GENAU zwei elemente hat).

So wäre es schon besser:
Code: Select all
$split = explode('/webseite/', $_SERVER['REQUEST_URI']);
$currentpage = 'Default Value';
if(count($split) === 2){
    $currentpage = $split[1];
}


Allerdings hoffe ich schwer dass du A) davor REQUEST_URI einer gründlichen Prüfung unterzogen hast und B) $currentpage nicht einfach so in einem include verwendest.

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Re: Win7 32-Bit / alles geht - Win7 64-Bit / vieles geht nic

Postby tebsu » 04. March 2011 21:56

naja da kommt nen include am ende bei raus also z.b. $currentpage.php wird included und wenn es $currentpage.php nicht gibt, wird fehler.php included also brauch ich ja keine andere überprüfungen, oder?
Code: Select all
if(file_exists('./content/main/'.strtolower($currentsite).'.php')){
      include('./content/main/'.strtolower($currentsite).'.php');}
else{
       include('./content/main/systemmsg/notfound.php');
tebsu
 
Posts: 4
Joined: 04. March 2011 20:47

Re: Win7 32-Bit / alles geht - Win7 64-Bit / vieles geht nic

Postby glitzi85 » 04. March 2011 22:35

Ja genau, und $currentsite ist dann sowas wie ../../geheimedatei...

Niemals, ich wiederhole NIEMALS Unvalidierte Variablen in sowas wie include, mysql o.ä. verwenden. Ich persönlich mach das so:

Liste von Dateinamen in einem bestimmten Verzeichnis erstellen und in dieser Liste dann die Datei zum includen raussuchen:

Code: Select all
<?php
$search = $_GET['page'].'.php';
$allowed_files = array();
if ($handle = opendir('./content/main/')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && strlen($file) > 4 && substr($file, -4) == '.php') {
            $allowed_files[$file] = $file;
        }
    }
    closedir($handle);
}
if(array_key_exists($search, $allowed_files)){
  include('./content/main/'.$allowed_files[$search]);
}else{
  include('./content/main/systemmsg/notfound.php');
}
?>

(Code ungetestet)

Wenn das ganze nicht dynamisch sein soll, kannst du auch ein array mit erlaubten Dateinamen erstellen und dagegen prüfen (geht dann etwas schneller, da das Verzeichnis nicht durchsucht werden muss).

mfg glitzi
User avatar
glitzi85
 
Posts: 1920
Joined: 05. March 2004 23:26
Location: Dahoim

Re: Win7 32-Bit / alles geht - Win7 64-Bit / vieles geht nic

Postby tebsu » 04. March 2011 23:00

cool danke, sieht gut aus :) ich werds mal so testen

/edit: funktioniert :)
tebsu
 
Posts: 4
Joined: 04. March 2011 20:47


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 25 guests