2013-01-22 11 views
10

Odziedziczyliśmy stronę PHP, która działa dobrze na Ubuntu, ale zrzuca kod źródłowy na ekran w systemie Windows 7 z XAMMP używając PHP 5.4, lub WAMP z PHP 5.3 .Strona PHP wyświetla się na ubuntu, a nie na Windows 7

Punkt, w którym pojawia się zrzut, wydaje się być, gdy próbuje przeanalizować kombinację znaków "->" (właściwość obiektu). Kiedy zmienię to na "[]", aby uzyskać dostęp jako element tablicy, przechodzi to obok, ale następnie zrzuca kod źródłowy na wyświetlacz, który pojawia się po kombinacji znaków "=>" (odwzorowanie). Skomentowanie tego nie działa, tylko usunięcie całej linii powoduje przejście do przeszłości.

Wreszcie, gdy jest to drukowanie html ze znakami "<" i ">", to również powoduje zrzut ekranu. Jeśli zamieniam te znaki na encje html, kod źródłowy nie zrzuci więcej, ale program nie wyświetla menu i nie działa wcale. Zauważ, że mogę zalogować się do aplikacji poprzez jej stronę logowania, chociaż nawet to wyświetla "POST" i inne znaki "<" i ">" w polu nazwy użytkownika.

Próbowałem już uruchomić Unix2dos na całej aplikacji, ale to nie miało żadnego efektu. Próbowałem także konwertować tekst jednej z nieczytelnych stron do UTF-8, ale wciąż nie miałem szczęścia.

W odpowiedzi na niektóre z pytań, jakie wersja ubuntu

Działanie to jest PHP Version 5.3.10-1ubuntu3.1

Pierwszy kawałek kodu, który działa w Ubuntu i nie jest to w systemie Windows :

public function __construct($gid) 
{ 
    $this->id = $gid; 
    return $this->retrieve(); 
} 

gdzie wysypisko kod na wyświetlaczu zaczyna:

id = $gid; return $this->retrieve(); } 

Tak, PHPInfo działa, pokazując serwer WAMP z PHP w wersji 5.3.13

Próbowałem zmienić tag short-open, ale nie miało to żadnego znaczenia.

Produkt został napisany dla nas przez grupę outsourcingową i wydaje się być oparty na pewnych ramach. Ale nie mogłem znaleźć żadnych odniesień do żadnej z nazw klasowych w Google, więc może napisali to wszystko w domu.

Idąc do dziennika apache, rzeczywisty błąd dzieje się na tej linii:

$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']); 

gdzie komunikat o błędzie:

Członkostwo”Nie znaleziono

Członkostwo jest klasa, która jest zadeklarowana później w tym samym pliku, co ta, która jest umieszczana na wyświetlaczu w punkcie pokazanym powyżej, więc z jakiegoś powodu parser PHP nie rozumie, czytanie kodu PHP z tego punktu.

+2

mógłbyś pisać najkrótszy kawałek kodu, który działa na jednej platformie, a nie inne? – Floris

+5

Wygląda na to, że dyrektywa short-open-tag jest wyłączona w Windows http://php.net/manual/en/ini.core.php#ini.short-open-tag –

+2

Czy można uzyskać ' 'do pracy na serwerze sieciowym Win7? – halfer

Odpowiedz

2
I tried changing the short-open-tag but it made no difference. 

W scenariuszu takim jak to, co można zrobić, to napisać mały skrypt i uruchomić go i sprawdzić, czy działa. spróbuj krótkiego tagu i poniższej metody. Należy pamiętać, że w przypadku problemów z numerem php.ini konieczne będzie ponowne uruchomienie serwera. Lepiej zmienić ustawienie, klikając prawym przyciskiem myszy ikonę serwera na pasku zadań. Może to być spowodowane php short tags.Spróbuj włączyć lub wyłączyć i uruchomić skrypt. Zmień również poniższy skrypt i zobacz, jak to wpływa na zmienione ustawienia.

EG:

<?php 
echo "hi"; 
// phpinfo(); <-- preferred if you can 
?> 

Następnie można sprawdzić, czy serwer jest was pracuje jako zamierzają go. Jeśli jest to O/P hi, dobrze jest wypróbować swój duży kod i zobaczyć.

Przy okazji, kod, który podałeś, nie zawiera błędów.

+0

To zostało początkowo zasugerowane w komentarzach, ale sposobem, aby go uruchomić, było ustawienie go przez ustawienie flagi przez kliknięcie prawym przyciskiem myszy na serwerze . –

0

Hmmm, to jest interesujące.

Jeśli jest to duża aplikacja, konieczne może być sprawdzenie wszystkich dołączanych plików. Może być wiele problemów.

spróbuj wykonać następujące kroki

  1. Ustaw error_reporting(E_ALL);
  2. Spróbuj użyć debug_backtracehttp://php.net/manual/en/function.debug-backtrace.php
  3. Sprawdź stan buforowania wyjścia. Czy to jest włączone czy wyłączone?

Po drugiej stronie, czy skopiowałeś cały projekt z Linuksa na Windows? może niektóre pliki znajdują się poza folderem projektu, których nie ma w oknach? Wiem, że wiele osób tworzy takie luki, więc można się z nimi skontaktować za "WSPARCIE" :)

0

W PHP nie ma znaczenia wielkość liter. Zwykle można wykonywać różne operacje, nawet jeśli klasa ma nazwę "Członkostwo" i na odwrót. Spróbuj zmienić nazwę klasy, być może w nazwie pliku klasy jest rozróżniana wielkość liter w systemie operacyjnym.

0

Jej naprawdę dziwne .. choć można sprawdzić klasa Członkostwo został załadowany lub nie przy użyciu funkcji:

array get_declared_classes (void) 


<?php 
print_r(get_declared_classes()); 
?> 

Będzie Zwraca tablicę z nazwami zdefiniowanych klas.

ref: http://php.net/manual/en/function.get-declared-classes.php

Powiązane problemy