PHP, ¿comprueba si existe la URL y un archivo?

4 minutos de lectura

Creé un complemento para WordPress que requiere que existan dos archivos para funcionar normalmente.

El primer archivo se define como una ruta del sistema de archivos y el segundo archivo se define como una URL.

Digamos que el primer archivo es ese:

/home/my_site/public_html/some_folder/required_file.php

y el segundo archivo es ese:

http://www.my_site.com/some_folder/required_url_file.php

Tenga en cuenta que ambos archivos no son el mismo archivo en el sistema de archivos. El archivo_requerido.php tiene otro contenido que el archivo_url_requerido.php y actúan de manera absolutamente diferente

¿Alguna idea sobre cómo validar la existencia de ambos archivos?

  • posible duplicado de ¿Cómo se puede verificar si existe un archivo remoto usando PHP? – para uso de archivos is_file.

    – hakré

    31 de octubre de 2011 a las 11:23


Puedes comprobar ambos:

$file="/home/my_site/public_html/some_folder/required_file.php";
$url="http://www.my_site.com/some_folder/required_url_file.php";

$fileExists = is_file($file);
$urlExists = is_200($url);

$bothExists = $fileExists && $urlExists;

function is_200($url)
{
    $options['http'] = array(
        'method' => "HEAD",
        'ignore_errors' => 1,
        'max_redirects' => 0
    );
    $body = file_get_contents($url, NULL, stream_context_create($options));
    sscanf($http_response_header[0], 'HTTP/%*d.%*d %d', $code);
    return $code === 200;
}

  • is_200() no es una función válida de WordPress. Este código falla en WordPress 3.3 en PHP 5.2.

    – Lanza Cleveland

    29 de noviembre de 2012 a las 18:18

  • @CharlestonSoftwareAssociates: Bueno, ¿quién escribió que es parte de WordPress? Si copia el código de la respuesta, no olvide copiar también la definición de la función. 😉

    – hakré

    29 de noviembre de 2012 a las 18:24


  • ok, me perdí esa parte, pero el método aún no es el mejor método para una configuración de WordPress. En primer lugar, 200 no es la única respuesta válida de que existe un elemento de URL remota. En segundo lugar, el método wp_remote_head() en WordPress tiene múltiples alternativas fuera de file_get_contents, incluidas las operaciones curl y socket directo. Eliminaría el voto negativo ya que su respuesta funcionará, pero no es la mejor solución de las proporcionadas para un proyecto de WordPress … pero SO lo ha bloqueado. :/

    – Lanza Cleveland

    29 de noviembre de 2012 a las 21:06


  • El último punto que escribe es técnicamente correcto, sin embargo, como WordPress es de pago por uso, lo que es mejor no es la pregunta, solo lo que funciona. Esto funcionó, así que está bien. No confiaré demasiado en las funciones básicas de WordPress porque la pila de funciones es bastante excéntrica. Mejor es que crees tu propia API para que sepas lo que tienes. El cuerpo de la función se puede reemplazar con algo diferente si no funciona.

    – hakré

    2 de diciembre de 2012 a las 12:38

  • no funcionará. Revisé tu código. no funciona… si (archivo_existe(“xxxxxxx.in/file/ue548fac6302e469.pdf”)) { return “¡El archivo existe!”; } else { return “El archivo no existe.”; }

    – pankaj kumar

    12 mayo 2020 a las 18:32

  • mi enlace estaba funcionando. puede consultar cualquier enlace de google.

    – pankaj kumar

    12 mayo 2020 a las 18:33

En cuanto a la validación de la URL, ninguna de estas respuestas considera la forma correcta de WordPress para llevar a cabo esta tarea.

para esta tarea wp_remote_head() debería ser usado.

Aquí hay un artículo que he escrito sobre Cómo verificar si existe una URL externa con la API HTTP de WordPress. Compruébalo y descubre cómo funciona.

  • Excelente solución. El código presentado en su artículo es la configuración correcta para este tipo de prueba. Publicaré mi versión simplificada de ese código en una función “webItemExists()” a continuación. Lo haría aquí, pero los comentarios no son adecuados para compartir código.

    – Lanza Cleveland

    29 de noviembre de 2012 a las 20:08

  • ¡Gracias @CharlestonSoftwareAssociates! Me alegro de que lo hayas encontrado útil.

    – Maor H.

    30 de noviembre de 2012 a las 21:08

  • Parece que el acceso al artículo anterior, actualmente, no es público (el sitio solicita nombre de usuario y contraseña).

    – aldemarcalazans

    11 dic 2020 a las 22:15

avatar de usuario
Rodrigo Ferreira

$file_exists = file_exists($path);
$url_accessable = http_get($url, array("timeout"=>10), $info); // should not be FALSE
$status_code = $info['response_code'] //should be 200

  • Excelente solución. El código presentado en su artículo es la configuración correcta para este tipo de prueba. Publicaré mi versión simplificada de ese código en una función “webItemExists()” a continuación. Lo haría aquí, pero los comentarios no son adecuados para compartir código.

    – Lanza Cleveland

    29 de noviembre de 2012 a las 20:08

  • ¡Gracias @CharlestonSoftwareAssociates! Me alegro de que lo hayas encontrado útil.

    – Maor H.

    30 de noviembre de 2012 a las 21:08

  • Parece que el acceso al artículo anterior, actualmente, no es público (el sitio solicita nombre de usuario y contraseña).

    – aldemarcalazans

    11 dic 2020 a las 22:15

avatar de usuario
ingenuos

Si tienes PECL http_head función disponible, puede verificar si devuelve el código de estado 200 para el archivo remoto.

Para verificar si puede acceder al archivo local, podría usar file_exists, pero esto no garantiza que podrá acceder a ese archivo. Para verificar si puede leer ese archivo, use is_readable.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad