Улучшение опроса с помощью ajax и php - PullRequest
1 голос
/ 27 июля 2011

Это работает, однако я думаю, что это может быть рецессор голоден, есть ли способ улучшить его?

Добавляет обратный вызов в db (test.php):

extract($_REQUEST); 
$query = "INSERT INTO calls (
                        `timestamp`,
                        `fromnum`,
                        `tonum`
                        )
                        VALUES (
                        NOW(),
                        '".mysql_real_escape_string( $from )."',
                        '".mysql_real_escape_string( $to )."'
                        )";
                        $sql = mysql_query($query) or die(mysql_error());

Получаетпоследняя запись в таблице вызовов (queue.php):

$result = mysql_query("SELECT fromnum FROM calls WHERE 
tonum = '$tonum' ORDER BY timestamp DESC LIMIT 1");

    while($row = mysql_fetch_array($result))
      {
      $fromnum = $row['fromnum'];
      }
    // Get caller info from contacts db
    $result = mysql_query("SELECT * FROM contacts WHERE phone = '$fromnum'");

    while($row = mysql_fetch_array($result))
      {
      echo '<table width="100%" border="0">
      <tr>
        <td width="33%">Account Number</td>
        <td width="33%">Contact Name</td>
        <td width="33%">Phone Number</td>
      </tr>
      <tr>
        <td>'.$row['number'].'</td>
        <td>'.$row['name'].'</td>
        <td>'.$row['phone'].'</td>
      </tr>
    </table>';
      }

Вызов информации из queue.php (listen.php):

var auto_refresh = setInterval(
function ()
{
$('#response').load('queue.php').fadeIn("slow");
}, 1000); // refresh every 10000 milliseconds
</script>
<div id="response"></div>

Спасибо за внимание, любая помощь приветствуется!

Приветствия, B.

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

До НЕ До extract($_REQUEST);.Это в основном воссоздает register_globals, при этом каждая дыра в безопасности / недостаток / глупость старых версий PHP восстанавливается до полной ослепительной славыЭто позволяет пользователю заполнить ваше пространство имен PHP произвольными значениями / переменными.

Если вас это не пугает, отойдите от компьютера и бегите домой.

2 голосов
/ 28 июля 2011

Эффективный транспорт

Ваш код обновляется не каждые 10 секунд, а каждую секунду (1000 миллисекунд равны 1 секунде). Такой быстрый опрос - это плохо. Вы должны как эффективный транспорт, который "ждет" новой информации. Самый простой транспорт, который работает в любом браузере - это длинный опрос, но не так хорошо масштабируется в PHP / Apache. К счастью, вы можете использовать бесплатный план pusher , который использует эффективный транспорт, называемый Websockets (который является будущим для связи в реальном времени). Когда вы становитесь большими, вы должны, например, набрать http://socket.io.

База данных в памяти

Я также советую вам обратиться к базам данных в памяти, таким как Redis или Memcached (популярный среди твиттер / фейсбук), чтобы хранить ваши запросы полностью в памяти, а не извлекать их с диска через SQL (который медленнее по сравнению с памятью). Мне очень нравится Redis, потому что он очень быстрый и более полный по сравнению с Memcached. Вам даже повезло, что redistogo предоставляет бесплатный план использования Redis. Таким образом, вам не нужно компилировать Redis, что очень легко (я думаю, что проще, чем компиляция memcached).

Кэш ByteCode

Когда вы можете установить APC , вы действительно должны это сделать, потому что это сделает ваш сайт намного быстрее, даже не написав ни единой строки кода. "Этот кэш байт-кода кэширует скомпилированный байт-код сценариев PHP, чтобы избежать накладных расходов при разборе и компиляции исходного кода при каждом запросе (некоторые или все из которых могут даже никогда не выполняться)".

SQL-инъекции.

Я бы посоветовал вам взглянуть на подготовленные операторы PDO , чтобы предотвратить SQL-инъекции правильным способом. Кроме того, PDO очень хорошо тестирует ваш код, потому что вы можете использовать режим в памяти, используя SQLite.

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