Простейшая из функций защиты от роботов, капча #

Простейшая из функций защиты от роботов, капча

<?php
function generate_code () {
  srand (time());
  $num=round(rand(1,4));
  $valid=0;
  echo "$num-й код из чисел: ";
  for ($i=1; $i<5; $i++) {
   $n=round(rand(1000,9999));
   if ($i==$num) $valid=$n;
   echo "$n";
   if ($i<4) echo ", ";
   else echo '<br/>';
  }
  $valid1=md5($valid);
  echo "<input type=text name=code size=4 maxlength=4 value=\"\"><input type=hidden name=valid value=\"$valid1\">";
}

//Вызов
echo generate_code();

//Проверка
if ( empty($_POST['code']) or empty($_POST['valid']) or md5($_POST['code'])!=$_POST['valid'] )
    die('Капчу запили блеать!');
+ Не использует сессии

Запуск php в фоновом режиме #

Запуск php в фоновом режиме

Столкнулся с необходимостью запустить скрипт в фоновом режиме. Гугле подсказывает, что можно:

Если есть возможность использовать set_time_limit(), то можно попробовать применить следующую конструкцию:

<?php
ignore_user_abort(1);  // Игнорировать обрыв связи с браузером
set_time_limit(0);       // Время работы скрипта неограниченно
do{
   // Что хотим, то воротим..
     if (file_exists( 'stop.txt'  ))
      break;                //Остановка скрипта, работающего в фоновом режиме
} while( true );
?>

Если же нету, то можно использовать этот метод:

<?php
$start_time = microtime();                               // Узнаем время запуска скрипта
$start_array = explode(' ',$start_time);             // Разделяем секунды и миллисекунды
$start_time = $start_array[1] + $start_array[0]; // Сумируем секунды и миллисекунды получаем стартовое время скрипта
ignore_user_abort(1);                                      // Игнорировать обрыв связи с браузером
$max_exec = ini_get( 'max_execution_time' );   // Получаем максимальное время работы скрипта
do{
   // Что хотим, то воротим..
   $now_time = microtime();                             // Узнаем текущее время
   $now_array = explode(' ',$now_time);
   $now_time = $now_array[1] + $now_array[0];
   $exec_time = $now_time - $start_time;         // Вычитаем из текущего времени начальное начальное
      if (file_exists( 'stop.txt' ))
      break;                                                     // Остановка скрипта, работающего в фоновом режиме
} while($exec_time > ($max_exec - 5));           // Проверяем время работы, если до конца работы скрипта
                                                                    // осталось менее 5 секунд, завершаем работу цикла.
$http = fsockopen('site.ru', 80);                       // Запускаем этот же скрипт новым процессом и завершаем работу текущего
fputs($http, "GET http://site.ru/script.php HTTP/1.0\r\n");
fputs($http, "Host: site.ru\r\n");
fputs($http, "\r\n");
fclose($http);
?>

Вот и реализация фонового режима работы. Безболезненно остановить работу скрипта можно удалив stop.txt.

Пример ниже демонстрирует как можно запустить PHP скрипт "в фоновом режиме". Запуск скрипта инициируется запросом скрипта по HTTP, но выполнение скрипта не заканчивается при обрыве соединения. Может использоваться для выполнения служебных действий на стороне сервера при невозможности использования для этих целей системной утилиты cron.

<?php
function doSomthing()
{
    // here we do somthing on server side
}
ignore_user_abort(false);
if (ob_get_level() == 0)
    ob_start();
// redirect lient to some site or abort connecion
header("Location: http://www.example.com/");
ob_flush();
flush();
$counter = 1;
while (true)
{
    ob_flush();
    flush();
    sleep(1);
    doSomthing();
    $counter++;
    if ($counter == 30)
        break;
}
ob_end_flush();
?>

Вот такие дела, остановился все же на CRON'e без гемморно и по моему правильней всего -)

Аякс чат - MYSQL PHP JQUERY CSS3 XHTML #

Поиск на Ajax #

Поиск на Ajax

HTML
<form id="searchForm" name="searchForm" method="post" action="javascript:insertTask();">
<div class="searchInput">
<input name="searchq" type="text" id="searchq" size="30" onkeyup="javascript:searchNameq()"/>
<input type="button" name="submitSearch" id="submitSearch" value="Search" onclick="javascript:searchNameq()"/>
</div>
</form>

<h3>Search Results</h3>
<div id="msg">Type something into the input field</div>
<div id="search-result"></div>

JS
function createObject() {
var request_type;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
request_type = new ActiveXObject("Microsoft.XMLHTTP");
} else {
request_type = new XMLHttpRequest();
}
return request_type;
}

var http = createObject();

function searchNameq() {
searchq = encodeURI(document.getElementById('searchq').value);
document.getElementById('msg').style.display = "block";
document.getElementById('msg').innerHTML = "Searching for <strong>" + searchq+"";
// Set te random number to add to URL request
nocache = Math.random();
http.open('get', 'in-search.php?name='+searchq+'&nocache = '+nocache);
http.onreadystatechange =  searchNameqReply;
http.send(null);
}
function searchNameqReply() {
if(http.readyState == 4){
var response = http.responseText;
document.getElementById('search-result').innerHTML = response;
}
}

php in-search.php
<?php
include('config.php');
$searchq = $_GET['name'];
$getName = mysql_query('SELECT * FROM USER WHERE name LIKE "%'.addslashes($searchq).'%"');
while ($row = mysql_fetch_array($getName))
    echo $row['name'] . '<br/>';
?>

Лист задач на ajax, jquery, php и mysql #

Скрипты Правки "на месте" #