1

У меня Ubuntu-9.04 и я использую XAMPP-1.7.2 для разработки веб-приложения. Проблема в том, что когда я пытаюсь просмотреть файл PHP, который я написал, посетив localhost/folder/file.php , Firefox предлагает мне загрузить его, а не показывать файл в виде веб-страницы. Если я скачаю его и открою в своем любимом текстовом редакторе, я получу пустой файл, в котором ничего нет ...

ОБНОВЛЕНИЕ: работает на другом сервере Ну, я загрузил страницу на другой сервер, и я вижу это хорошо! Так что проблема не в Firefox. И не с самим кодом. Мой сервер или его конфигурация должны быть проблемой. Это дает кому-то из вас ключ к пониманию того, что происходит?

ОБНОВЛЕНИЕ: Изоляция проблемы Firefox предлагает загрузить только первый из этих трех файлов:

test1.php предлагается для скачивания

<?php
    mysql_connect("localhost","root","");
    mysql_close();
?>

Вывод test2.php : Предупреждение: mysql_close(): ресурс MySQL-Link не указан в /opt/lampp/htdocs/test.php в строке 3

<?php
    //mysql_connect("localhost","root","");
    mysql_close();
?>

test3.php выводит пустую страницу

<?php
    mysql_connect("localhost","root","");
    //mysql_close();
?>

Я знаю, что мой сервер запущен и работает, и он говорит мне, что PHP5 включен и работает.

Вот что я получаю в журнале ошибок XAMPP при возникновении проблемы (усечено и отформатировано для ясности):

[notice] child pid 7338 exit signal Segmentation fault (11)

О, и Firefox может видеть файл без проблем на моем другом компьютере (Windows XP SP3 и easyPHP в качестве сервера) Кто-нибудь знает, что я могу сделать, чтобы решить эту проблему?

ОБНОВЛЕНИЕ: использование error_log()

Вот моя попытка использования error_log():test4.php

<?php
    error_log("Start of file reached by PHP");
    mysql_connect("localhost","root","");
    error_log("mysql_connect executed");
    mysql_close();
    error_log("mysql_close executed");
?>

Вот что выдает в журнале ошибок XAMPP (для ясности):

[error] [client 127.0.0.1] Start of file reached by PHP
[error] [client 127.0.0.1] mysql_connect executed
[notice] child pid 5338 exit signal Segmentation fault (11)

4 ответа4

2

Это может быть аппаратная проблема или проблема конфигурации Apache/PHP. Я обычно видел Сигнал 11 с проблемами памяти. Посмотрите на ваши конфиги, чтобы убедиться, что ограничение памяти PHP не превышает ограничение памяти Apache или подобное.

Похоже, ваш php_mod не работает в середине программы, поэтому Apache просто выдает вам php-файл с заголовком не-html-типа, что заставляет ваш браузер воспринимать его как загрузку. Это всего лишь предположение. Вам нужно собрать больше информации.

Добавьте несколько вызовов error_log() в вашу PHP-программу, чтобы вы могли изолировать, когда в вашем коде действительно происходит сбой. Если это не поможет сузить его, настройте Apache для создания дампа ядра и используйте gdb чтобы выяснить, где начинается segfault. Моя ставка - mod_php.so.

1

Пахнет как ваша MySQL установка. MySQL работает как сервис? У вашей корневой учетной записи действительно нет пароля? Какие расширения MySQL загружаются в php.ini? Есть php_mssql.dll который можно легко принять за php_msql.dll , но я вполне уверен, что php_mssql.dll предназначен только для Windows.

Вы редактировали свой php.ini /opt/lampp/php/php.ini? Это может помочь с отладкой:

error_reporting  =  E_ALL & ~E_NOTICE
display_errors = On
display_startup_errors = On ;but you'll want to turn this off soon ;)
mysql.trace_mode = On

Также стоит посмотреть, номер порта используется. Установлен ли $ MYSQL_TCP_PORT? Как насчет записи mysql-tcp в /etc /services?

Обновление: Вы пытались проверить возвращаемое значение функции подключения? Мне интересно, если вы пример слишком минимален. Попробуйте сделать ваш тест похожим на это:

<?php

$db = mysql_connect("localhost","root","myrootpassword");
if (!$db) {
    die('Could not connect: ' . mysql_error());
}
else {
    $result = mysql_query("show databases");
   print "
   <h1>Test executed from ". $_SERVER['SCRIPT_NAME']. "</h1>

    \n";
    print "Script name: ". $_SERVER['SCRIPT_FILENAME'] ." <hr>\n";
    while ($line = mysql_fetch_array($result))
    {
        print "$line[0]<br>\n";
    }
}       
mysql_close($db);

?> 

Этот пример гарантирует, что вы отправляете что-то обратно, похожее на HTML, независимо от того, работает ваш скрипт или нет Я смог воспроизвести ваши симптомы без установленного пароля root, так что это, очевидно, не только хорошая практика, но она должна быть непустой.

Я смог превратить вашу проблему в решение

  1. Установка пароля root
  2. возвращая что-то из скрипта при подключении

Вместо того, чтобы вводить "" в качестве пароля root, если это действительно ничего, попробуйте использовать mysql.default_password в качестве пароля. Значением по умолчанию для mysql.default_password является NULL.

1

Вы говорите, что все в порядке и что простые файлы отображаются нормально. Но затем некоторые файлы предлагают вам сохранить файл PHP. Это означает, что вам придется посмотреть код тех страниц, где он ломается, и попросить вас сохранить.

Скорее всего, у вас есть строка в коде, которая убивает сервер или просто заставляет его отказаться от анализа PHP.

Это может быть конкретное расширение, которое используется на этой странице, или это может быть другая функция killbot, которая заставляет сервер просто сидеть там со скрещенными руками.

Ваши журналы ошибок показывают, что последнее, что произойдет до того, как появится диалоговое окно сохранения, - это подключение к базе данных. Вернитесь к этому коду и убедитесь, что он твердый, прежде чем переходить к следующему возможному устранению неполадок, которые могут возникнуть или не возникнуть.

Поскольку вы можете видеть файл без проблем в другой настройке, в данном случае easyPHP, проблема очень сильно связана с настройкой XAMPP и конфигурацией, которая отключается кодом.

0

Я столкнулся с точно такой же ошибкой. Убедитесь, что пользовательские привилегии mysql установлены правильно.

Войдите в командную строку и подтвердите, что вы можете войти, переключиться на соответствующую базу данных и просмотреть таблицы и записи. Просто войдите в систему с помощью команды: 'mysql -u user -p' и запустите некоторые запросы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .