Table des matières
1. Délai d'exécution du fichier PHP
(1) Temps d'exécution du script de réglage initial
2. Délai d'expiration de la requête PHP Curl
3. Délai d'expiration de la demande de socket PHP
4. Traitement du délai d'expiration de File_get_contents (socket d'encapsulation, file_put_contents est similaire)
5. Délai d'expiration de la demande PHP Soap
Maison développement back-end Problème PHP Quelles sont les méthodes pour définir le timeout PHP ?

Quelles sont les méthodes pour définir le timeout PHP ?

May 26, 2021 pm 05:23 PM
php 超时

Cet article vous présentera comment définir le délai d'attente PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Quelles sont les méthodes pour définir le timeout PHP ?

1. Délai d'exécution du fichier PHP

(1) Temps d'exécution du script de réglage initial

Ouvrez le fichier php.ini et recherchez :

max_execution_time=30
Copier après la connexion

est modifié en :

max_execution_time=600
Copier après la connexion

Si vous ne disposez pas des autorisations de modification du serveur, vous pouvez définir le délai d'attente via la méthode de script PHP intégrée et ajouter le code suivant au fichier PHP qui doit effectuer des opérations à long terme :

<?php
ini_set(&#39;max_execution_time&#39;, 600);//秒为单位,自己根据需要定义
Copier après la connexion

Vous pouvez également définir le délai d'attente via le fichier .htaccess et ajouter le code suivant dans le fichier :

php_value max_execution_time 600
Copier après la connexion

(2) Réinitialiser le temps d'exécution du script et réinitialiser le timer

set_time_limit (int $seconds) : bool

seconds------Durée d'exécution maximale, en secondes. S'il est défini sur 0 (zéro), il n'y a pas de limite de temps.

Définissez l'heure à laquelle le script est autorisé à s'exécuter, en secondes. Si ce paramètre est dépassé, le script renvoie une erreur fatale. La valeur par défaut est 30 secondes, ou la valeur définie dans max_execution_time dans php.ini, si cette valeur existe.

Lorsque cette fonction est appelée, set_time_limit() redémarrera le compteur de délai d'attente à partir de zéro. En d'autres termes, si le délai d'expiration par défaut est de 30 secondes et que set_time_limit(20) est appelé lorsque le script est exécuté depuis 25 secondes, alors la durée totale pendant laquelle le script peut s'exécuter avant l'expiration est de 45 secondes.

2. Délai d'expiration de la requête PHP Curl

Curl est une bibliothèque lib couramment utilisée pour accéder à l'interface du protocole HTTP. Elle a des performances élevées et certaines fonctions de support simultanées.

curl_setopt($ch, opt) peut définir certains paramètres de délai d'attente, notamment :

a, CURLOPT_TIMEOUT définit le nombre maximum de secondes pendant lesquelles CURL est autorisé à s'exécuter.

b. CURLOPT_TIMEOUT_MS définit le nombre maximum de millisecondes pendant lequel CURL est autorisé à s'exécuter.

c.CURLOPT_CONNECTTIMEOUT Le temps d'attente avant d'initier une connexion S'il est défini sur 0, il attendra indéfiniment.

d. CURLOPT_CONNECTTIMEOUT_MS Le temps d'attente pour une tentative de connexion, en millisecondes. S'il est défini sur 0, attendez indéfiniment.

e. CURLOPT_DNS_CACHE_TIMEOUT définit l'heure de sauvegarde des informations DNS en mémoire, la valeur par défaut est de 120 secondes.

3. Délai d'expiration de la demande de socket PHP

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=> 1, "usec"=> 0 ) ); // 接收
socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=> 3, "usec"=> 0 ) );  // 发送
Copier après la connexion

Bien que PHP ait un paramètre de délai d'attente pour se connecter au socket pour la méthode fsockopen(), il n'y a pas de paramètre de délai d'attente pour lire et écrire des données après une réussite. connexion en C configurée. Peu importe, PHP fournit une série de méthodes pour les flux afin d'éviter les délais d'attente.

stream_set_blocking( $fp , false )
Copier après la connexion

Définissez le flux de données en mode bloquant pour empêcher sa sortie avant la lecture des données

Si le mode est faux, le descripteur de socket donné passera en mode non bloquant s'il est vrai. , Passez ensuite en mode bloc. Cet effet est similaire à la lecture de fgets() à partir du socket. En mode non-bloc, fgets() reviendra immédiatement, tandis qu'en mode bloc, il attendra que les données répondent aux exigences.

stream_set_timeout( $fp , 10 )
Copier après la connexion

Définissez le délai d'attente. Cette phrase doit être ajoutée immédiatement après l'établissement réussi de la connexion. L'unité de paramètre suivante est en secondes

Obtenez l'en-tête/les métadonnées du pointeur du fichier du protocole d'encapsulation et renvoyez un. Tableau dont le format est :

Array
(
  [stream_type] => tcp_socket
  [mode] => r+
  [unread_bytes] => 0
  [seekable] =>
  [timed_out] =>
  [blocked] => 1
  [eof] =>
)
Copier après la connexion

L'index timed_out est l'information de délai d'attente, s'il expire, c'est vrai, s'il n'a pas expiré, c'est faux Nous pouvons utiliser cela pour juger si. le socket a expiré. Il convient de noter que cette phrase doit être ajoutée après chaque instruction qui doit être attendue, comme fwrite(), fread(), et à chaque fois qu'elle est lue, il faut juger si elle est chronométrée. out, et pour une connexion, un seul paramètre de délai d'attente stream_set_timeout ( $fp , 10 ) suffit.

$fp = @fsockopen( $ip , $port, $errNo , $errstr, 30 );
if( !$fp )
{
  return false;
}
else
{
  stream_set_timeout( $fp , 3 ) ;
  //发送数据
  fwrite( $fp , $packet ) ;
  $status = stream_get_meta_data( $fp ) ;
  //发送数据超时
  if( $status[&#39;timed_out&#39;] )
  {
    echo "Write time out" ;
    fclose( $fp );
    return false;
  }
  //读取数据
  $buf = fread( $fp , 16 ) ;
  $status = stream_get_meta_data( $fp ) ;
  //读取数据超时
  if( $status[&#39;timed_out&#39;] )
  {
    echo "Read time out" ;
    fclose( $fp );
    return false;
  }
}
Copier après la connexion

4. Traitement du délai d'expiration de File_get_contents (socket d'encapsulation, file_put_contents est similaire)

À partir de PHP5, file_get_content prend déjà en charge le contexte (le manuel dit : 5.0.0 Ajout de la prise en charge du contexte.), Dans en d'autres termes, à partir de la version 5.0, file_get_contents peut réellement POST des données. Les fichiers similaires incluent fopen (la prise en charge du contexte a également été ajoutée depuis PHP5) et file (la prise en charge a été ajoutée dans PHP5).

<?php
$get_opts = array(   
  &#39;http&#39;=>array(   
    &#39;method&#39; => "GET",   
    &#39;timeout&#39; => 1,//单位秒, 默认使用php.ini中default_socket_timeout的设置
   )   
);
$post_opts = array(
&#39;http&#39;=>array(   
    &#39;method&#39; => "POST",   
    &#39;timeout&#39; => 60,//单位秒, 可用ini_set(&#39;default_socket_timeout&#39;, 120);进行默认设置
    &#39;content&#39; =>  http_build_query($param_array, &#39;&#39;, &#39;&&#39;)
   )   
);
 
$opts = $get_opts;
$res = file_get_contents($url, FALSE, stream_context_create($opts)); //返回string,失败返回FALSE
Copier après la connexion

5. Délai d'expiration de la demande PHP Soap

    ini_set(&#39;default_socket_timeout&#39;, 30); //定义响应超时为30秒
 
    try {
      $options = array(
        &#39;cache_wsdl&#39; => 0,
        &#39;connection_timeout&#39; => 5, //定义连接超时为5秒,默认php.ini中default_socket_timeout的值
      );
      libxml_disable_entity_loader(false);
      $client = new \SoapClient($url, $options);
      return $client->__soapCall($function_name, $arguments);
 
    } catch (\SoapFault $e) {
      //超时、连接不上
      if($e->faultcode == &#39;HTTP&#39;){
        throw new TimeoutException(&#39;连接或请求超时&#39;, $e->getCode());
      }
    }
Copier après la connexion

La demande Soap peut également utiliser le contexte du flux de ressources, et le délai d'expiration de la demande peut être écrit dans stream_context_create().

try {
         $arrContextOptions=array("ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false,&#39;crypto_method&#39; => STREAM_CRYPTO_METHOD_TLS_CLIENT));
 
          //$arrContextOptions=array("http"=>array( "method"=>&#39;GET&#39;, &#39;timeout&#39;=>10));
         $options = array(
                 &#39;soap_version&#39;=>SOAP_1_2,
                 &#39;exceptions&#39;=>true,
                 &#39;trace&#39;=>1,
                 &#39;cache_wsdl&#39;=>WSDL_CACHE_NONE,
                 &#39;stream_context&#39; => stream_context_create($arrContextOptions)
         );
         $client = new SoapClient(&#39;https://url/dir/file.wsdl&#39;, $options);
     
     } catch (Exception $e) {
         echo "<h2>Exception Error!</h2>";
         echo $e->getMessage();
     }
Copier après la connexion

Apprentissage recommandé : Tutoriel vidéo php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

See all articles