Как я могу заставить свой PHP-код перебирать массив и удалять прокси, которые не работают?
<?php
$proxies = array(
"187.120.243.27:42026",
"138.185.56.166:32070",
"200.195.186.205:30698",
"170.239.46.2:41823",
"189.85.84.186:80",
);
//foreach value of array do the instructions below
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxies);
//this value should be one value at time of the array 'proxies'
curl_setopt($ch,CURLOPT_URL,'http://icanhazip.com/');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
"User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language: en-US,en;q=0.5",
"DNT: 1",
"Upgrade-Insecure-Requests: 1",
"Connection: close"
));
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpcode > 1) {
echo "$data";
//live proxy stays on the list
}
else {
//unset current array(remove not working proxy)
}
?>
Я уже написал базовый код, но я новичок в PHP, может ли кто-нибудь мне помочь? Идея состоит в том, чтобы проверить все прокси в списке и удалить прокси, которые не работают.






Мы можем получить доступ к паре ключ-значение в цикле foreach. Мы используем синтаксис $key => $value для доступа к ним обоим по отдельности. Теперь, когда прокси выходит из строя, нам просто нужно использовать функцию unset(), используя $key для удаления этого значения прокси из массива $proxies:
// Initialize live_proxies array
$live_proxies = $proxies;
// In the foreach loop, we access key and its value
// value is $proxy
foreach ($live_proxies as $key => $proxy) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//this value should be one value at time of the array 'proxies'
curl_setopt($ch,CURLOPT_URL,'http://icanhazip.com/');
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
"User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language: en-US,en;q=0.5",
"DNT: 1",
"Upgrade-Insecure-Requests: 1",
"Connection: close"
));
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpcode > 1) {
echo "$data";
}
else {
// use unset function to remove current proxy value
// from the live_proxies array using the $key
unset($live_proxies[$key]);
}
}
@eduardtrionleon проверьте обновленный ответ. я делаю копию массива прокси и называю его live_proxies; теперь внутри цикла я изменяю копию (вместо оригинала)
Ты классный чувак, код работает на 100%, большое спасибо xD
Спасибо за сверхбыстрый ответ, я понял код, но как я могу создать новый массив только с живыми прокси?