2013-01-22 10 views
10

Abbiamo ereditato una pagina PHP che funziona bene su Ubuntu, ma scarica il codice sorgente sul display su un sistema Windows 7 con XAMMP usando PHP 5.4, o WAMP usando PHP 5.3 .La pagina PHP viene visualizzata su ubuntu, non su Windows 7

Il punto in cui si verifica il dump sembra essere quando tenta di analizzare una combinazione di caratteri "->" (oggetto di proprietà). Quando lo cambio in "[]" per accedere come elemento di array, lo supera, ma poi scarica il codice sorgente sul display che appare dopo la combinazione di caratteri "=>" (mappatura). Commentandolo non funziona, solo eliminando l'intera linea lo supera.

Infine, quando si stampa semplicemente html con i segni "<" e ">", anche questo causa il dump dello schermo. Se sostituisco quei caratteri con le entità html, il codice sorgente non scarica più, ma il programma non visualizza il menu e non funziona affatto. Si noti che posso accedere correttamente all'app tramite la sua pagina di accesso, anche se questo mostra "POST" e qualche altro "<" e ">" caratteri nel campo del nome utente.

Ho provato a eseguire unix2dos sull'intera app, ma ciò non ha avuto alcun effetto. Ho anche provato a convertire il testo di una delle pagine offensive in UTF-8, ma ancora senza fortuna.

In risposta ad alcune delle domande poste: versione di Ubuntu

Il funzionamento è PHP versione 5.3.10-1ubuntu3.1

Il primo pezzo di codice che funziona in Ubuntu e non in Windows è questo :

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

in cui il codice discarica sul display inizia con:

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

Sì, PHPInfo funziona, mostrando per il server WAMP con PHP Versione 5.3.13

Ho provato a cambiare il tag di apertura breve ma non ha fatto alcuna differenza.

Il prodotto è stato scritto per noi da un gruppo di outsourcing e sembra essere basato su un qualche tipo di struttura. Ma non sono riuscito a trovare alcun riferimento a nessuno dei nomi di classe su Google, quindi forse hanno scritto tutto in casa.

Andare al log di Apache, l'errore effettivo accade su questa linea:

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

in cui il messaggio di errore è:

appartenenza' non trovato

appartenenza è un classe che viene dichiarata più tardi nello stesso file di quello che viene scaricato sul display nel punto sopra indicato, quindi per qualche motivo il parser PHP non capisce che è leggendo il codice PHP da quel punto.

+2

Potrebbe inviare il pezzo più breve di codice che funziona su una piattaforma e non l'altro? – Floris

+5

sembra che la direttiva short-open-tag sia stata disattivata in windows http://php.net/manual/en/ini.core.php#ini.short-open-tag –

+2

Puoi ottenere un ' 'funziona sul server web Win7? – halfer

risposta

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

In uno scenario come questo ciò che si può fare è scrivere un piccolo script ed eseguirlo e vedere se funziona. prova tag breve e metodo sottostante. Tieni presente che se ti incasini con il tuo php.ini dovrai riavviare il server. È meglio modificare l'impostazione facendo clic con il pulsante destro del mouse sull'icona del server sulla barra delle applicazioni. Potrebbe essere dovuto a php short tags.Prova a abilitare e disabilitare e a eseguire lo script. Inoltre, modifica lo script seguente e osserva come questo influisce sulle impostazioni modificate.

EG:

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

Poi si può vedere se il server si sta lavorando come intendono a. Se è O/P hi sei bravo a provare il tuo grande codice e vedere.

Il codice che hai fornito non sembra avere errori.

+0

Questo era inizialmente suggerito nei commenti, ma il modo per farlo funzionare era impostarlo impostando il flag facendo clic destro sul server . –

0

Hmmm, è interessante.

Se questa è una grande applicazione, potrebbe essere necessario controllare tutti i file inclusi. Ci può essere un numero di problemi.

prova a fare le seguenti operazioni

  1. Impostare error_reporting(E_ALL);
  2. Provare a utilizzare debug_backtracehttp://php.net/manual/en/function.debug-backtrace.php
  3. Verifica stato di buffer di uscita. È acceso o spento

Dall'altro lato, hai copiato l'intero progetto da Linux a Windows? alcuni file si trovano al di fuori della cartella del progetto che non sono presenti in Windows? So che molte persone creano tali scappatoie in modo che possano essere contattate per "SUPPORTO" :)

0

PHP non fa distinzione tra maiuscole e minuscole per la denominazione della classe. Normalmente è possibile effettuare

$membership = new membership(); 

anche se la classe è denominata "Membership" e viceversa. Prova a cambiare il nome della classe, forse il nome del file di classe è case sensitive sul sistema operativo.

0

sua davvero strano .. anche se è possibile controllare la classe Membership stato caricato o non si utilizza la funzione:

array get_declared_classes (void) 


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

Sarà Restituisce un array con il nome delle classi definite.

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

Problemi correlati