Pour récupérer le header tu ouvres un flux, si le site ne répond pas tu restes bloqué à attendre que ça se connecte jusqu'à temps que ton timeout de connexion soit atteint.
Tu as aussi un timeout d’exécution php, c'est à dire un temps limite d'exécution de tes scripts, si un script est trop long il finit par être abandonné (mais là tu as un message d'erreur).
Ce que tu peux faire, c'est introduire dans ta boucle l'écriture d'un fichier pour débugger. À chaque pas tu écris des informations dans le fichier, comme ça tu peux savoir à partir de quel pas ça déconne.