2010-10-18 3 views
0

У меня есть простой модальный диалог, который я разработал на моем собственном сервере linux, работающем под php 5.3. Скрипт (показано ниже) отлично работает на моем сервере. Тем не менее, я переместил его на linux-сервер моего клиента и вместо того, чтобы повторять текст/html, который, по-видимому, должен делать, он вызывает ВСЕ фактический php-код из символа> (больше). Кто-нибудь знает, почему это будет отражать фактический код? Есть ли причина для установки php.ini? или разница в кодировке файла в двух настройках?php script - это бесплатный PHP-код, не знаю, почему

<?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>'; 
} 
?> 

В результате на сервере моего клиента является:

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

PHP не получает синтаксический анализ. Какое расширение вы используете? –

+1

Я думаю, это то, что вы видите на экране ... если вы посмотрите на код, не получите ли вы весь PHP-код? – greg0ire

+1

Скорее всего, весь код PHP отправляется, но открытие 'в вашем if() скрыто. Просмотрите источник страницы, и все будет там. –

ответ

3

Если вы работаете в Apache файл httpd.conf, вероятно, оленья кожа имеет модуль PHP включен.

7

Похоже, что другой сервер не настроен на запуск PHP. Есть ли такая строка в конфиге?

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

Почему вы обрабатываете '.html' и' .htm' с помощью PHP? – NikiC

+0

Упс, не предполагал, что OP должен это сделать - мне просто пришлось вырезать и вставить эту строку из конфигурации, где у меня есть этот набор. Это не очень полезно, если вы используете фреймворк, но для прямых приложений он выполняет две вещи: 1) он скрывает тот факт, что вы используете PHP на этом сервере, потому что все страницы выглядят как что-то. Htm, а не что-то. PHP. 2) Он позволяет произвольно добавлять PHP в любой файл, не беспокоясь о переименовании и всех ссылках на него. –

1

Как упоминалось в других ошибках, это, вероятно, проблема конфигурации сервера.

Если вы используете Apache (вы, вероятно, есть), вы должны взглянуть на httpd.conf на своей машине, которая, вероятно, находится в /etc/apache2/.

Если вы работаете в PHP как модуль (по умолчанию вы), то вам необходимо убедиться, что есть строка в нем, что выглядит следующим образом:

LoadModule php5_module modules/libphp5.so 

(Вот как это выглядит по моему, путь/имя файла может отличаться)

Если вы работаете в PHP с Fast-CGI, я не уверен, как я никогда не использовал его: D

в любом случае, вы также хотите делать то, что @Alex Howansky предлагает и проверяет httpd.conf для строки, которая выглядит как

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

Это настраивает Apache для связывания указанных расширений с PHP.

Смежные вопросы