Отменить PHP-скрипт с XHR? - PullRequest
       14

Отменить PHP-скрипт с XHR?

2 голосов
/ 12 декабря 2011

У меня есть с вашей помощью:

function send(){
  $.get("/site/send.php", function(data){
    alert(data);
  }
}

На сайте / send.php у меня есть:

for($=0;$i++;$i<1000)
    sleep(1);
}
    echo "OK";

Далее у меня в файле js:

send();
$("#click").click(function(){
  window.stop(); // this cancel XHR
  $.get("/site/reset.php", function(data){
    alert(data);
  }
})

и в файле reset.php:

echo "RESET";

window.stop ();отмените мой XHR, но это все еще не работает хорошо.я отменяю XHR, но все же я должен ждать sleep (1000) в функции send ().Это ничего не возвращает, но все еще продолжает выполняться.Только если sleep> 1000, тогда / site / reset.php начинает выполняться.

как я могу в этом примере отменить функцию PHP?

возможна ли проверка в PHP-файле, проверить, установлен ли XHR?

Ответы [ 3 ]

2 голосов
/ 12 декабря 2011

Может работать любое из следующих:

ignore_user_abort(false);

for ($=0;$i++;$i<1000) {
   if (connection_aborted()) break;

for ($=0;$i++;$i<1000) {
   if (connection_status() != CONNECTION_NORMAL) break;
1 голос
/ 12 декабря 2011

Если у вас есть root-доступ на php-сервере, если вы работаете в linux, вы можете просто выполнить команду bash, используя `: *

echo `ps -A`;

, чтобы получить список всех запущенных процессов на компьютере., затем, если вы знаете, что пользователь apache использует для выполнения сценариев, вы можете затем повторить ps -u user;

После определения правильного PID вы можете уничтожить его с помощью:

echo `kill PID`;

ex

echo `kill 1023`;

или

// Я не знаю, работает ли это именно так eval ('echo kill '.$_GET['PID'].';');

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

Вы можете использовать AJAX для запроса такого рода заданий из скрипта, о котором упоминалось.

Также вы можете сделать php-файлнапишите клиенту его собственный PID (Google для функции записи, он очень похож на c), а затем javascript может отправить этот PID непосредственно в этот сценарий-убийцу, чтобы дать команду остановки выполнения для некоторого сценария.

РЕДАКТИРОВАТЬ 1:

вы можете запуститьPID скрипта с этой функцией:

getmypid();

, и вы можете сохранить его в файле или, что лучше, в переменной сеанса

$_SESSION[__FILE__] = getmypid();

и, чтобы остановить запуск файла, вы можете вызватьстраница вроде этой (killer.php):

<?php
// security verifications, etc
/*

*/ 
session_start();
$f = $_SESSION[$_GET['file']];
echo `kill $f`;

?>

Хотя это опасно.

Я не знаю точных команд для выполнения, или если у вас есть или нет такой контроль, или даже если вы находитесь в системе Linux.Если хочешь, я могу немного изучить его.

С уважением,

0 голосов
/ 12 декабря 2011
$("#click").click(function(){
  //window.stop(); 
  return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...