печать бессмысленных строк текста препятствует загрузке страницы, но слишком много строк не позволяют получить все записи в таблице MySQL. Зачем? - PullRequest
0 голосов
/ 07 января 2010

Может кто-нибудь из вас помочь мне понять поведение, которое я испытываю при посещении этой страницы?

<html>

    <body>

    <?php
        $liendb = mysql_connect("localhost","","");

        mysql_select_db ("test");
        for($i = 0; $i < 418; ++$i)
        {
            echo("Any old text<br />");
        }


        $resultatSQL = mysql_query("SELECT uid FROM nombres ORDER BY uid");

        while($tab = mysql_fetch_array($resultatSQL, MYSQL_ASSOC))

        {
            echo("<p>".$tab['uid']."</p>");
            echo("<br />\n");

        }

        mysql_close();

    ?>

    </body>
</html>

Я экспортировал таблицу mysql, на которой основан этот пример, чтобы мы могли работать с одной и той же таблицей. Вот она:

-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 06-01-2010 a las 21:49:50
-- Versión del servidor: 5.1.37
-- Versión de PHP: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de datos: `test`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `nombres`
--

CREATE TABLE IF NOT EXISTS `nombres` (
  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;

--
-- Volcar la base de datos para la tabla `nombres`
--

INSERT INTO `nombres` (`uid`) VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8),
(9),
(10),
(11),
(12),
(13),
(14),
(15),
(16),
(17),
(18),
(19),
(20),
(21),
(22),
(23),
(24),
(25),
(26),
(27),
(28),
(29),
(30),
(31),
(32),
(33),
(34),
(35),
(36),
(37),
(38),
(39),
(40),
(41),
(42);

Теоретически, я считаю, что на этой странице должно быть напечатано 418 строк «Любого старого текста», а затем напечатаны все записи таблицы «nombres», то есть числа от 1 до 42. На практике это происходит. Но если я изменю это магическое число, 418, возникнут проблемы.

Если я использую число меньше 418, Firefox предлагает загрузить страницу вместо того, чтобы просто показывать ее мне. Если я ее скачиваю, я получаю пустой файл ..

Если я использую число больше 418, я не получу все записи в таблице "nombres". Например, когда я использую 419, я получаю только цифры от 1 до 41. Когда я использую 420, я получаю только цифры от 1 до 40. И так до 454, где я получаю только номер 1. Остальная часть страницы, все следующее числа усекаются, включая закрывающее тело и HTML-теги.

Если я использую 455 или больше, я вообще не получаю никаких цифр!

Мои вопросы:

Кто-нибудь еще может воспроизвести это поведение? Как вы могли бы объяснить это поведение?

Я использую сервер apache (на самом деле xampp) Я напечатал phpinfo () и попросил firefox сохранить полученную страницу .. Вот она, сжатая. www.angelfire.com / планета / shawninder / phpinfo.zip

Ответы [ 4 ]

1 голос
/ 14 января 2010

Судя по вашему коду, возможно, проблема в соединении mysql. Вы должны всегда проверять, успешно или нет соединение mysql, прежде чем использовать его. Попробуйте переписать ваш код так:

<html>
    <body>
    <?php
        //open connection
        $liendb = mysql_connect("localhost","","");
        if ( ! $liendb )
        {
          die('Could not connect: ' . mysql_error());
        }

        //select database
        $select_db = mysql_select_db ("test", $liendb);
        if ( ! $select_db )
        {
          die ("Failed to do select the database: ' . mysql_error());
        }

        //print 'magic' lines
        for($i = 0; $i < 418; ++$i)
        {
            echo("Any old text<br />");
        }

        //get table's content
        $resultatSQL = mysql_query("SELECT uid FROM nombres ORDER BY uid", $liendb);
        if ( ! $resultatSQL )
        {
          die('Invalid query: ' . mysql_error());
        }

        //process table content
        while($tab = mysql_fetch_array($resultatSQL, MYSQL_ASSOC))
        {
            echo("<p>".$tab['uid']."</p>");
            echo("<br />\n");
        }
        mysql_close($liendb);
    ?>
    </body>
</html>

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

Дайте мне знать результат на вашем компьютере.

0 голосов
/ 07 января 2010

Работает нормально для меня. Кажется, он печатает все ожидаемые строки «Любой старый текст», а также все цифры после этого.

Я полагаю, что это может быть неправильная конфигурация веб-сервера или PHP, но я не совсем понимаю, с чего начать.

0 голосов
/ 07 января 2010

Я попробовал, и все работает как положено.

Единственное, что я заметил, это то, что страница занимает около 8 КБ. Есть ли какая-то волшебная конфигурация в вашем веб-сервере (какой веб-сервер вы используете?), Которая может быть связана с размером страницы 8 КБ?

0 голосов
/ 07 января 2010

Какой веб-сервер вы используете? Apache? Установлены ли какие-либо дополнения к PHP? Попробуйте поставить flush () после echo, чтобы увидеть, что происходит. Если бы вы могли показать вам phpinfo (), это могло бы помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...