He estado haciendo una pequeña página en mi servidor para mostrar algunos álbumes de fotos. Esto está en un servidor nginx en una raspberry pi 4. Cuando trato de acceder a la página desde mi computadora portátil o teléfono cuando están en wifi, todo se carga correctamente. Sin embargo, cuando uso mi teléfono con LTE, por ejemplo, las solicitudes de php no funcionan. Verifiqué con mi computadora portátil usando mi punto de acceso inalámbrico y tuve el mismo problema. Nunca obtengo el código "200" que mi navegador está esperando. A mi tampoco me da error. Es como si la solicitud http desapareciera. Tengo otras páginas en este mismo servidor donde el php funciona correctamente, una de las cuales es casi exactamente igual a este código. El php que estoy tratando de usar es uno que devuelve los nombres de archivos y álbumes como una cadena larga. La salida esperada sería:
Hermanos|Wyoming|Utah|Esquí|
Todo esto funciona cuando se accede desde mi red local. En el pasado, he usado archivos php mucho más elaborados para acceder a imágenes de cámaras de seguridad y también enviar scripts de shell para activar y desactivar un relé. Estos funcionaron desde cualquier parte del mundo, no solo desde mi red. Sé muy poco sobre estas cosas, así que espero que me esté perdiendo algo obvio que un experto pueda reconocer de inmediato. :) Incluiré mi código a continuación.
obtener archivos.php
<?php function clean_scandir($dir){ return array_values(array_diff(scandir($dir),array('.','..'))); } $directory = $_GET['dir']; $files = clean_scandir("/var/www/html/" . $directory); foreach($files as $file){ $fileStr .= $file . "|"; } echo $fileStr; ?>Y el javascript que está tratando de usar este php:
function getAlbums(){ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function(){ if(this.readyState == 4 && this.status == 200){ console.log("return packet = " + this.response); var albumArray = this.response.split("|"); albumArray.pop(); //remove empty last element for (var i = 0; i < albumArray.length; i++){ console.log("album " + i + " = " + albumArray[i]); } getThumbnail(albumArray); setTimeout(() => { populateAlbums(albumArray); //waits 1 sec for thumbnail requests to finish before loading thumbnails }, 1000); } } var urlString = "getfiles.php?dir=" + "photos/"; xmlhttp.open("GET", urlString, true); xmlhttp.send(); }El código nunca llega a la consola. Los registros que están dentro de la gran declaración 'if', asumo porque el estado nunca llega a 200. No obtengo ningún otro número como un código 500. Simplemente permanece en blanco.
He intentado modificar lentamente el código php. Si el archivo es simplemente:
echo "php successful";entonces funciona Pero por alguna razón, el código completo está causando problemas. A veces, los problemas tampoco actúan de la misma manera cada vez.