Heim php教程 php手册 php定时计划任务与fsockopen持续进程实例

php定时计划任务与fsockopen持续进程实例

Jun 13, 2016 am 09:34 AM
fsockopen 计划任务

Web服务器执行一个PHP脚本,有时耗时很长才能返回执行结果,后面的脚本需要等待很长一段时间才能继续执行。
如果想实现只简单触发耗时脚本的执行而不等待执行结果就直接执行下一步操作,可以通过fscokopen函数来实现。

PHP支持socket编程,fscokopen函数返回一个到远程主机连接的句柄,可以像使用fopen返回的句柄一样,对它进行 fwrite、fgets、fread等操作。
使用fsockopen连接到本地服务器,触发脚本执行,然后立即返回,不等待脚本执行完成,即可实现异步 执行PHP的效果。

例子:

复制代码 代码如下:


 
function triggerRequest($url, $post_data = array(), $cookie = array()){ 
  $method = "GET";  //通过POST或者GET传递一些参数给要触发的脚本 
  $url_array = parse_url($url); //获取URL信息 
  $port = isset($url_array['port'])? $url_array['port'] : 80;   
  $fp = fsockopen($url_array['host'], $port, $errno, $errstr, 30); 
  if (!$fp) { 
    return FALSE; 
  } 
  $getPath = $url_array['path'] ."?". $url_array['query']; 
  if(!empty($post_data)){ 
    $method = "POST"; 
  } 
  $header = $method . " " . $getPath; 
  $header .= " HTTP/1.1\r\n"; 
  $header .= "Host: ". $url_array['host'] . "\r\n "; //HTTP 1.1 Host域不能省略 
  /*以下头信息域可以省略
  $header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13 \r\n";
  $header .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,q=0.5 \r\n";
  $header .= "Accept-Language: en-us,en;q=0.5 ";
  $header .= "Accept-Encoding: gzip,deflate\r\n";
   */ 

  $header .= "Connection:Close\r\n"; 
  if(!empty($cookie)){ 
    $_cookie = strval(NULL); 
    foreach($cookie as $k => $v){ 
$_cookie .= $k."=".$v."; "; 
    } 
    $cookie_str =  "Cookie: " . base64_encode($_cookie) ." \r\n"; //传递Cookie 
    $header .= $cookie_str; 
  } 
  if(!empty($post_data)){ 
    $_post = strval(NULL); 
    foreach($post_data as $k => $v){ 
$_post .= $k."=".$v."&"; 
    } 
    $post_str  = "Content-Type: application/x-www-form-urlencoded\r\n";  
    $post_str .= "Content-Length: ". strlen($_post) ." \r\n"; //POST数据的长度 
    $post_str .= $_post."\r\n\r\n "; //传递POST数据 
    $header .= $post_str; 
  } 
  fwrite($fp, $header); 
  //echo fread($fp, 1024); //服务器返回 
  fclose($fp); 
  return true; 
}  

这样就可以通过fsockopen()函数来触发一个PHP脚本的执行,然后函数就会返回。 接着执行下一步操作了。
现在存在一个问题:当客户端断开连接后,也就是triggerRequest发送请求后,立即关闭了连接,那么可能会引起服务器端正在执行的脚本退出

在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

* 0 – NORMAL(正常)
* 1 – ABORTED(异常退出)
* 2 – TIMEOUT(超时)

  当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限(参阅 set_time_limit() 函数)时,TIMEOUT 状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端 连接 中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的"php_value ignore_user_abort"以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() ,可以让我们设置一个当执行关闭时可以被调用的另一个函数.也就是说当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,我们的这个函数将会 被调用,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

  脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的"php_value max_execution_time"参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调 用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。

  注意,ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。

所以还在要触发的脚本中指明:

复制代码 代码如下:


  ignore_user_abort(TRUE); //如果客户端断开连接,不会引起脚本abort 
  set_time_limit(0); //取消脚本执行延时上限 
或使用:
  register_shutdown_function(callback fuction[, parameters]); //注册脚本退出时执行的函数

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Planen Sie Aufgaben, um Zeitpunkte festzulegen und einmalige Aufgaben auszuführen, die vom atd-Dienst abhängen Planen Sie Aufgaben, um Zeitpunkte festzulegen und einmalige Aufgaben auszuführen, die vom atd-Dienst abhängen Mar 11, 2024 am 09:07 AM

Die geplante Aufgabe ist so geplant, dass sie atat zu einem bestimmten Zeitpunkt einmal ausführt, und die einmalige Aufgabe hängt vom atd-Dienst ab. Sie muss gestartet werden, um die at-Aufgabe zu realisieren. Die at-Warteschlange wird in /var/spool/ gespeichert. im Verzeichnis -V: Versionsinformationen anzeigen -l: Die angegebenen Warteschlangenjobs auflisten, die auf die Ausführung warten; äquivalent zu atq-d: Den angegebenen Job löschen, äquivalent zu atrm-c: Spezifische Jobaufgaben anzeigen [root@localhost~]#systemctlstartatd [root@localhost~]#systemctlenableatd[root@localhost~]# atnow+1minat>useraddxwzat>#

Wie stelle ich das geplante Ein- und Ausschalten von Windows 7 ein? Wie stelle ich das geplante Ein- und Ausschalten von Windows 7 ein? Jul 10, 2023 pm 09:49 PM

Die meisten Benutzer wissen nicht, wie die automatische Ein- und Ausschaltmethode für Windows 7 eingestellt wird, aber Benutzer wissen nicht, wie sie eingerichtet werden kann Geben Sie einen einfachen Code ein und verwenden Sie cmd, um ihn einzurichten. Im Folgenden finden Sie eine Einführung in die eigentliche Methode zum Ein- und Ausschalten des Windows 7-Timers. Wie kann man den Timer von Windows 7 ein- und ausschalten? 1. Automatisches Herunterfahren einstellen. Tatsächlich kann dies nur innerhalb der Möglichkeiten des Systems selbst erfolgen, d. h. durch Eingabe des Befehls zum Herunterfahren in das Aktionsfeld. Öffnen Sie die Menüleiste und klicken Sie auf Aktion. Wenn nicht, drücken Sie einfach die Tastenkombination, um es zu öffnen, und Win+R, um es zu öffnen. 2. Zum Beispiel, wenn wir den Strom nach drei Stunden ausschalten möchten

Zeitgesteuerte Aufgaben und geplante Aufgabentechnologie in PHP Zeitgesteuerte Aufgaben und geplante Aufgabentechnologie in PHP May 11, 2023 pm 04:13 PM

Mit der rasanten Entwicklung des Internets müssen immer mehr Websites und Anwendungen einige geplante Aufgaben und geplante Aufgaben im Hintergrund ausführen, z. B. Datenbereinigung, Sicherung, statistische Analyse usw. Als beliebte Webentwicklungssprache bietet PHP auch die entsprechende Technologie für geplante Aufgaben und geplante Aufgaben. In diesem Artikel werden die Technologien für geplante Aufgaben und geplante Aufgaben in PHP ausführlich vorgestellt. 1. Konzept und Nutzungsszenarien geplanter Aufgaben 1.1 Konzept Geplante Aufgaben beziehen sich auf die automatische Ausführung bestimmter Aufgaben oder Vorgänge innerhalb eines bestimmten Zeitpunkts oder Zeitintervalls. 1,2 machen

Der PHP-Webcrawler verwendet fsockopen, um HTTP-Anfragen zu implementieren Der PHP-Webcrawler verwendet fsockopen, um HTTP-Anfragen zu implementieren Jun 17, 2023 am 11:02 AM

Ein Webcrawler ist ein automatisiertes Datenerfassungstool, das durch Simulation des Benutzerverhaltens automatisch Daten im Netzwerk erfassen und speichern oder analysieren kann. Als weit verbreitete Webentwicklungssprache verfügt PHP auch über eine Fülle von Webcrawler-Entwicklungstools und -technologien. In diesem Artikel wird erläutert, wie Sie mithilfe der fsockopen-Funktion von PHP HTTP-Anforderungen implementieren und so ein einfaches Webcrawler-System erstellen. Die fsockopen-Funktion ist eine PHP-Funktion, die sich auf die Socket-Kommunikation bezieht

Zeitgesteuerte Aufgaben und geplante Aufgabenverwaltung mit PHP und Miniprogrammen Zeitgesteuerte Aufgaben und geplante Aufgabenverwaltung mit PHP und Miniprogrammen Jul 04, 2023 am 10:05 AM

Timing-Aufgaben und geplante Aufgabenverwaltung von PHP und Miniprogrammen Mit der kontinuierlichen Weiterentwicklung der Internet-Technologie müssen viele Websites und Anwendungen regelmäßig bestimmte Aufgaben ausführen, wie z. B. Datenbereinigung, Datenanalyse, Datensynchronisierung usw. Bei der PHP- und kleinen Programmentwicklung ist die Verwaltung geplanter Aufgaben und geplanter Aufgaben ein wichtiges Thema. In diesem Artikel wird die Verwendung von PHP und Applets zur Verwaltung zeitgesteuerter und geplanter Aufgaben vorgestellt und entsprechende Codebeispiele gegeben. Geplante Aufgabenverwaltung in PHP In PHP können wir Cron verwenden, um geplante Aufgaben zu verwalten.

Laravel-Entwicklung: Wie plant man Aufgaben mit Laravel Task Scheduling? Laravel-Entwicklung: Wie plant man Aufgaben mit Laravel Task Scheduling? Jun 13, 2023 pm 02:23 PM

Laravel ist ein beliebtes PHP-Framework, das die Entwicklung von Webanwendungen hervorragend unterstützt. Eine der leistungsstarken und nützlichen Funktionen ist LaravelTaskScheduling. In diesem Artikel wird erläutert, wie Sie mit LaravelTaskScheduling geplante Aufgaben ausführen. 1. Was ist die geplante Aufgabe von LaravelTaskScheduling? LaravelTaskScheduling ist

Wie implementiert man zeitgesteuerte Aufgaben und geplante Aufgaben über das Webman-Framework? Wie implementiert man zeitgesteuerte Aufgaben und geplante Aufgaben über das Webman-Framework? Jul 08, 2023 am 11:43 AM

Wie implementiert man zeitgesteuerte Aufgaben und geplante Aufgaben über das Webman-Framework? Webman ist ein leichtes Webframework, das auf der Go-Sprache basiert und eine einfache Möglichkeit bietet, geplante Aufgaben und geplante Aufgaben umzusetzen. In diesem Artikel wird erläutert, wie Sie mit dem Webman-Framework zeitgesteuerte Aufgaben und geplante Aufgaben implementieren und entsprechende Codebeispiele bereitstellen. Bevor Sie das Webman-Framework verwenden können, müssen Sie zunächst Webman installieren. Webman kann mit dem folgenden Befehl installiert werden: gogetgithub.com/he

So richten Sie vom Computer geplante Aufgaben im Win7-System ein So richten Sie vom Computer geplante Aufgaben im Win7-System ein Jul 10, 2023 pm 01:41 PM

Wir sehen oft Worte, die ein Projekt starten. Tatsächlich ist dies die Einstellung für geplante Aufgaben in unserem Computer. Wenn unser Computer startet, werden diese geplanten Aufgaben mit dem Win7-System gestartet. Einige Aufgaben müssen möglicherweise gestartet werden, andere jedoch nicht. In diesem Zusammenhang können wir diese geplanten Aufgaben einrichten. Sehen wir uns die detaillierte Bedienung an. 1. Zuerst finden wir die Startmenüleiste auf dem Computer. Im Startmenü können wir verwandte Optionen sehen, die Option „Systemsteuerung“ finden und zum Aufrufen klicken. 2. Nachdem wir die Systemsteuerung des Computers aufgerufen haben, können wir die System- und Sicherheitsoptionen sehen. Klicken Sie in der ersten Zeile der aktuellen Seite auf die Schaltfläche und öffnen Sie sie. 3. Nachdem wir die System- und Sicherheitsoptionen der Systemsteuerung des Computers eingegeben haben, finden wir unten die Schaltfläche „Verwaltungstools“.

See all articles