PHP - Que utilizar para solo ejecutar una parte del script

 
Vista:
sin imagen de perfil
Val: 54
Ha aumentado su posición en 38 puestos en PHP (en relación al último mes)
Gráfica de PHP

Que utilizar para solo ejecutar una parte del script

Publicado por Carlos (26 intervenciones) el 17/06/2021 08:10:22
Buenas, tengo un script en PHP que me compara si hay cambios en un archivo. Esta parte funciona bien.
A veces esa web se cae y recibo estos errores
PHP Warning: file_get_contents(url):

failed to open stream: HTTP request failed! HTTP/1.1 502 Bad Gateway

failed to open stream: HTTP request failed! HTTP/1.1 522 Origin Connection Time-out
in

failed to open stream: HTTP request failed! HTTP/1.1 520 Origin Error
in /


failed to open stream: HTTP request failed! HTTP/1.1 523 Origin Unreachable

failed to open stream: HTTP request failed! HTTP/1.1 521 Origin Down


Este script se ejecuta cada 5 minutos por cron
La primera parte me captura los datos y la 2 me compara si hay cambios
Si la primera falla servidor caído recibo varios


PHP Notice: Undefined offset: 2 in


Que puedo hacer para que la primera parte del código que se ejecuta cada 5 minutos, si está el servidor caído no me de error .y sobre todo que la segunda parte del código se ejecute cuando la primera se inició al.menos 6 veces.
Digamos que la segunda parte solo se ejecute 1 de cada 6 veces se ejecute el script
¿Algún ejemplo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Que utilizar para solo ejecutar una parte del script

Publicado por Mauro (1037 intervenciones) el 17/06/2021 13:51:57
Hola Carlos!

¿No te serviría poner un if? Si falla el file_get_contents simplemente salteas lo que viene después.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 38 puestos en PHP (en relación al último mes)
Gráfica de PHP

Que utilizar para solo ejecutar una parte del script

Publicado por Carlos (26 intervenciones) el 17/06/2021 16:57:17
Hola, buscando encontré este script para indicarme si la URL existe.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Script que comprueba si la url existe
$url = "xxxxx";
$file_headers = @get_headers($url);
if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
 
  $exists = false;
  exit;
}
else {
    $exists = true;
}
 
 
Y este es el que que utilizo para capturar datos y guardar una parte en un archivo.
 
// Script que captura datos
$data = file_get_contents("");
 
if ( preg_match('|<a href="xxxx">yyyyyyy</a>(.*?)</b></td></tr>|is' , $data , $cap ) )
{
  //  echo "".$cap[1];
}



Si no existe la URL simplemente se sale del script y si existe continua guarda lo capturado en un archivo y continua el script que compara los datos para ver si hay cambios.



Creo que eso me valdria seguramente se podrá hacer más fácil.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 38 puestos en PHP (en relación al último mes)
Gráfica de PHP

Que utilizar para solo ejecutar una parte del script

Publicado por Carlos (26 intervenciones) el 19/06/2021 22:54:35
Hola pues tras probar unos días me sigue dando errores
Probé con otro script y me pasa lo mismo

1
2
3
4
5
6
7
8
9
10
11
12
13
$url = "xxxxx";
$contents = file_get_contents("$url");
 
if (strlen($contents))
{
//echo "si"; // Si que existe
}
else
{
//echo "no"; // No existe!!
 
exit;
}


PHP Warning: file_get_contents(xxxx): failed to open stream: HTTP request failed! HTTP/1.1 520 Origin Error
in /var/www/html/script/alertam.php on line

¿Alguna sugerencia?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Que utilizar para solo ejecutar una parte del script

Publicado por joel (1269 intervenciones) el 21/06/2021 07:52:28
Hola Carlos, fíjate que no es un error como tal, si no que es un Warning... y te aparecerá siempre a no ser que verifiques que hay una dirección url correcta.

También puedes deshabilitar los mensajes Warnings en tu servidor web o como te comente, verificar la url.

Aquí tienes como comprobar si una url es correcta: función para validar si una url es correcta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Que utilizar para solo ejecutar una parte del script

Publicado por Mauro (1037 intervenciones) el 21/06/2021 15:42:01
Hola Carlos:

Prueba agregando un context a tu llamada a file_get_contents.

Usando la opción ignore_errors puedes llegar a ver qué está ocurriendo.

Igualmente yo te recomendaría que verifiques cuál es la URL que estás utilizando e intentes hacer un request por algún otro medio (curl desde la línea de comnados por ejemplo) para ver qué puede estar ocurriendo.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 38 puestos en PHP (en relación al último mes)
Gráfica de PHP

Que utilizar para solo ejecutar una parte del script

Publicado por Carlos (26 intervenciones) el 22/06/2021 16:21:08
Hola Mauro, probé con otro código, y aparentemente parece que va.
Actualmente tengo el código original que me envía errores al email, y este que no envía errores y por ahora va perfecto.
Si fallara probaré lo que me comentas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Script que comprueba si la url existe y si no se sale y me envía un mensaje por telegram
$url = "http://url";
##########
 
$content = @file_get_contents("$url");
if (strpos($http_response_header[0], "200")) {
   //echo "SUCCESS";
} else {
   //echo "FAILED";
   	file_get_contents('https://api.telegram.org/bot/xxxxxx&text=Servidor caido');
   exit;
}
 
// Script que captura fecha y hora de la url en cap[1]
 
 
if ( preg_match('|<a href="http://xxxxxxxx</a>(.*?)</b></td></tr>|is' , $content , $cap ) )
{
  //  echo "".$cap[1];
}


Aún así no se qué forma hacer que si existe la URL solo se ejecute un fragmento del código.
Digamos que esta parte se ejecute en cron cada 5 minutos, y el resto cada 10. Lo fácil es crear 2 script y uno ejecutarlo cada 5 y otro cada 10.
¿Alguna forma de decirle eso?
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar