2010-10-18 5 views
0

J'ai un simple dialogue modal que j'ai développé sur mon propre serveur linux, exécutant php 5.3. Le script (illustré ci-dessous) fonctionne correctement sur mon serveur. Cependant, je l'ai déplacé sur le serveur linux de mon client et au lieu de faire écho au texte/html qu'il est censé faire, il renvoie tout le code php réel du caractère> (supérieur à). Est-ce que quelqu'un sait pourquoi cela ferait écho au code réel? Y a-t-il un paramètre php.ini qui provoque cela? ou la différence de codage de fichier dans les deux configurations?php script est ouputting php code, pas sûr pourquoi

<?php 


$to_email = '[email protected]'; 
$link = $_GET['link']; 
if(!$link){ 
    echo '<p>Have a suggestion?<br />Enter the URL below!</p>'; 
}else if(strlen($link) > 256 || !preg_match('/^(http:\/\/)?subdomain\.somesite\.com\/(somedir\/)?anotherdir\/(.+)/',$link) && !preg_match('/^(http:\/\/)?somedomain2\.com\/somedir2\/(.+)/',$link)){ 
    echo '<p class="error">Whoops, the URL entered doesn\'t <br />match the criteria.</p>'; 
}else{ 
    $link = str_replace("\n.", "\n..", $link); 
    if(!preg_match('/^http:\/\//',$link)){ 
    $link = 'http://'.$link; 
    } 
    mail($to_email, 'New URL Suggestion', "A new URL has been suggested from your site:\n\n".$link,"From: ".$to_email."\r\n"); 
    echo '<p>Thank you for submitting this URL! <br />It should be live within 24 hours.</p>'; 
} 
?> 

Le résultat sur le serveur de mon client est:

256 || !preg_match('/^(http:\/\/)?subdomain\.somesite\.com\/(somedir\/)?anotherdir\/(.+)/',$link) && 
!preg_match('/^(http:\/\/)?somedomain2\.com\/somedir2\/(.+)/',$link)){ echo ' 
Whoops, the URL entered doesn\'t 
match the criteria. 

'; }else{ $link = str_replace("\n.", "\n..", $link); 
if(!preg_match('/^http:\/\//',$link)){ $link = 'http://'.$link; } mail($to_email, 
'New URL Suggestion', "A new URL has been suggested from your site:\n\n".$link,"From: 
".$to_email."\r\n"); echo ' 
Thank you for submitting this URL! 
It should be live within 24 hours. 

'; } ?> 
+0

Le PHP n'est pas analysé. Dans quelle extension l'exécutez-vous? –

+1

Je suppose que c'est ce que vous voyez sur votre écran ... si vous regardez le code, n'obtenez-vous pas le code PHP complet? – greg0ire

+1

Très probablement le code PHP entier est envoyé, mais l'ouverture 'dans votre if() est caché. Voir la source de la page et tout sera là. –

Répondre

3

Si vous utilisez apache votre fichier httpd.conf ne marche pas probablement le module php activé.

7

Semble que l'autre serveur n'est pas configuré pour exécuter PHP. A-t-il une ligne comme celle-ci dans la config?

AddType application/x-httpd-php .php .html .htm 
+0

Pourquoi traitez-vous également '.html' et' .htm' avec PHP? – NikiC

+0

Oups, n'a pas l'intention d'impliquer l'OP devrait le faire - Je viens de couper et coller cette ligne à partir d'une config où j'ai cet ensemble. Ce n'est pas très utile si vous utilisez un framework, mais pour les applications droites, il accomplit deux choses: 1) Il cache le fait que vous utilisez PHP sur ce serveur, car les pages apparaissent toutes comme quelque chose.htm au lieu de quelque chose. php. 2) Il vous permet d'ajouter arbitrairement PHP à n'importe quel fichier sans vous soucier de le renommer et tous les liens vers celui-ci. –

1

Comme mentionné dans les autres erreurs, il s'agit probablement d'un problème de configuration du serveur. Si vous utilisez Apache (vous l'êtes probablement), vous devriez jeter un oeil à httpd.conf sur leur machine, qui se trouve probablement dans /etc/apache2/.

Si vous utilisez PHP en tant que module (par défaut, vous êtes), vous devez vous assurer qu'il ya une ligne dans ce qui ressemble à ceci:

LoadModule php5_module modules/libphp5.so 

(C'est ce qu'il ressemble à sur le mien, le chemin/nom de fichier peut être différent)

Si vous utilisez PHP avec Fast-CGI, je ne suis pas sûr, comme je l'ai jamais utilisé: D

Quoi qu'il en soit, vous devez aussi faire ce que suggère @Alex Howansky et vérifier httpd.conf pour une ligne qui ressemble à

AddType application/x-httpd-php .php .html .htm 

Ceci configure Apache pour qu'il associe les extensions spécifiées à PHP.