PHP로 URL이 존재하는지 확인하려면 어떻게 해야 하나요?
PHP에 (404가 아닌) URL이 존재하는지 확인하려면 어떻게 해야 하나요?
여기:
$file = 'http://www.example.com/somefile.jpg';
$file_headers = @get_headers($file);
if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
여기서부터 위 포스트 바로 아래에 컬 솔루션이 있습니다.
function url_exists($url) {
return curl_init($url) !== false;
}
php에서 url이 존재하는지 확인할 때 주의해야 할 점이 몇 가지 있습니다.
- URL 자체가 유효한가(문자열, 빈 구문이 아닌 올바른 구문), 서버 측을 빠르게 확인할 수 있습니다.
- 응답을 기다리는 데 시간이 걸리고 코드 실행을 차단할 수 있습니다.
- get_headers()에 의해 반환되는 모든 헤더의 형식이 올바른 것은 아닙니다.
- 컬을 사용합니다(가능한 경우).
- 전체 본문/콘텐츠 가져오기를 금지하고 헤더만 요청합니다.
- URL을 리다이렉트 하는 것을 검토해 주세요.
- 첫 번째 코드를 반환하시겠습니까?
- 아니면 모든 리다이렉트를 따라 마지막 코드를 반환하시겠습니까?
- 200이 될 수도 있지만 메타 태그나 자바스크립트를 사용하여 리다이렉트 할 수도 있습니다.그 후에 무슨 일이 일어날지 알아내는 것은 어렵다.
어떤 방법을 사용하든 응답을 기다리는 데 시간이 걸립니다.
모든 코드는 사용자가 결과를 알거나 요청이 타임아웃될 때까지 중지될 수 있습니다.
예를 들어, 다음 코드는 URL이 비활성화되거나 도달할 수 없는 경우 페이지를 표시하는 데 오랜 시간이 걸릴 수 있습니다.
<?php
$urls = getUrls(); // some function getting say 10 or more external links
foreach($urls as $k=>$url){
// this could potentially take 0-30 seconds each
// (more or less depending on connection, target site, timeout settings...)
if( ! isValidUrl($url) ){
unset($urls[$k]);
}
}
echo "yay all done! now show my site";
foreach($urls as $url){
echo "<a href=\"{$url}\">{$url}</a><br/>";
}
아래 함수는 도움이 될 수 있습니다.필요에 맞게 수정하는 것이 좋습니다.
function isValidUrl($url){
// first do some quick sanity checks:
if(!$url || !is_string($url)){
return false;
}
// quick check url is roughly a valid http request: ( http://blah/... )
if( ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(\.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url) ){
return false;
}
// the next bit could be slow:
if(getHttpResponseCode_using_curl($url) != 200){
// if(getHttpResponseCode_using_getheaders($url) != 200){ // use this one if you cant use curl
return false;
}
// all good!
return true;
}
function getHttpResponseCode_using_curl($url, $followredirects = true){
// returns int responsecode, or false (if url does not exist or connection timeout occurs)
// NOTE: could potentially take up to 0-30 seconds , blocking further code execution (more or less depending on connection, target site, and local timeout settings))
// if $followredirects == false: return the FIRST known httpcode (ignore redirects)
// if $followredirects == true : return the LAST known httpcode (when redirected)
if(! $url || ! is_string($url)){
return false;
}
$ch = @curl_init($url);
if($ch === false){
return false;
}
@curl_setopt($ch, CURLOPT_HEADER ,true); // we want headers
@curl_setopt($ch, CURLOPT_NOBODY ,true); // dont need body
@curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true); // catch output (do NOT print!)
if($followredirects){
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,true);
@curl_setopt($ch, CURLOPT_MAXREDIRS ,10); // fairly random number, but could prevent unwanted endless redirects with followlocation=true
}else{
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,false);
}
// @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5); // fairly random number (seconds)... but could prevent waiting forever to get a result
// @curl_setopt($ch, CURLOPT_TIMEOUT ,6); // fairly random number (seconds)... but could prevent waiting forever to get a result
// @curl_setopt($ch, CURLOPT_USERAGENT ,"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"); // pretend we're a regular browser
@curl_exec($ch);
if(@curl_errno($ch)){ // should be 0
@curl_close($ch);
return false;
}
$code = @curl_getinfo($ch, CURLINFO_HTTP_CODE); // note: php.net documentation shows this returns a string, but really it returns an int
@curl_close($ch);
return $code;
}
function getHttpResponseCode_using_getheaders($url, $followredirects = true){
// returns string responsecode, or false if no responsecode found in headers (or url does not exist)
// NOTE: could potentially take up to 0-30 seconds , blocking further code execution (more or less depending on connection, target site, and local timeout settings))
// if $followredirects == false: return the FIRST known httpcode (ignore redirects)
// if $followredirects == true : return the LAST known httpcode (when redirected)
if(! $url || ! is_string($url)){
return false;
}
$headers = @get_headers($url);
if($headers && is_array($headers)){
if($followredirects){
// we want the last errorcode, reverse array so we start at the end:
$headers = array_reverse($headers);
}
foreach($headers as $hline){
// search for things like "HTTP/1.1 200 OK" , "HTTP/1.0 200 OK" , "HTTP/1.1 301 PERMANENTLY MOVED" , "HTTP/1.1 400 Not Found" , etc.
// note that the exact syntax/version/output differs, so there is some string magic involved here
if(preg_match('/^HTTP\/\S+\s+([1-9][0-9][0-9])\s+.*/', $hline, $matches) ){// "HTTP/*** ### ***"
$code = $matches[1];
return $code;
}
}
// no HTTP/xxx found in headers:
return false;
}
// no headers :
return false;
}
$headers = @get_headers($this->_value);
if(strpos($headers[0],'200')===false)return false;
그래서 당신이 웹사이트에 연락해서 200개 이상의 것을 얻을 수 있을 때 언제든지 그것은 작동될 것입니다.
특정 서버에서는 컬을 사용할 수 없습니다.이 코드를 사용할 수 있습니다.
<?php
$url = 'http://www.example.com';
$array = get_headers($url);
$string = $array[0];
if(strpos($string,"200"))
{
echo 'url exists';
}
else
{
echo 'url does not exist';
}
?>
다음 기능을 사용합니다.
/**
* @param $url
* @param array $options
* @return string
* @throws Exception
*/
function checkURL($url, array $options = array()) {
if (empty($url)) {
throw new Exception('URL is empty');
}
// list of HTTP status codes
$httpStatusCodes = array(
100 => 'Continue',
101 => 'Switching Protocols',
102 => 'Processing',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
207 => 'Multi-Status',
208 => 'Already Reported',
226 => 'IM Used',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => 'Switch Proxy',
307 => 'Temporary Redirect',
308 => 'Permanent Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Payload Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
418 => 'I\'m a teapot',
422 => 'Unprocessable Entity',
423 => 'Locked',
424 => 'Failed Dependency',
425 => 'Unordered Collection',
426 => 'Upgrade Required',
428 => 'Precondition Required',
429 => 'Too Many Requests',
431 => 'Request Header Fields Too Large',
449 => 'Retry With',
450 => 'Blocked by Windows Parental Controls',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported',
506 => 'Variant Also Negotiates',
507 => 'Insufficient Storage',
508 => 'Loop Detected',
509 => 'Bandwidth Limit Exceeded',
510 => 'Not Extended',
511 => 'Network Authentication Required',
599 => 'Network Connect Timeout Error'
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (isset($options['timeout'])) {
$timeout = (int) $options['timeout'];
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
}
curl_exec($ch);
$returnedStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (array_key_exists($returnedStatusCode, $httpStatusCodes)) {
return "URL: '{$url}' - Error code: {$returnedStatusCode} - Definition: {$httpStatusCodes[$returnedStatusCode]}";
} else {
return "'{$url}' does not exist";
}
}
$url = 'http://google.com';
$not_url = 'stp://google.com';
if (@file_get_contents($url)): echo "Found '$url'!";
else: echo "Can't find '$url'.";
endif;
if (@file_get_contents($not_url)): echo "Found '$not_url!";
else: echo "Can't find '$not_url'.";
endif;
// Found 'http://google.com'!Can't find 'stp://google.com'.
function URLIsValid($URL)
{
$exists = true;
$file_headers = @get_headers($URL);
$InvalidHeaders = array('404', '403', '500');
foreach($InvalidHeaders as $HeaderVal)
{
if(strstr($file_headers[0], $HeaderVal))
{
$exists = false;
break;
}
}
return $exists;
}
Pinterest에서 이상한 결과를 얻었기 때문에 karim79의 get_headers() 솔루션은 나에게 효과가 없었습니다.
get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Array
(
[url] => https://www.pinterest.com/jonathan_parl/
[exists] =>
)
get_headers(): Failed to enable crypto
Array
(
[url] => https://www.pinterest.com/jonathan_parl/
[exists] =>
)
get_headers(https://www.pinterest.com/jonathan_parl/): failed to open stream: operation failed
Array
(
[url] => https://www.pinterest.com/jonathan_parl/
[exists] =>
)
어쨌든 이 개발자는 cURL이 get_headers()보다 훨씬 빠르다는 것을 보여줍니다.
http://php.net/manual/fr/function.get-headers.php#104723
많은 분들이 curl 솔루션 carim79를 수정해 달라고 요청하셨기 때문에, 제가 오늘 구축한 솔루션은 다음과 같습니다.
/**
* Send an HTTP request to a the $url and check the header posted back.
*
* @param $url String url to which we must send the request.
* @param $failCodeList Int array list of code for which the page is considered invalid.
*
* @return Boolean
*/
public static function isUrlExists($url, array $failCodeList = array(404)){
$exists = false;
if(!StringManager::stringStartWith($url, "http") and !StringManager::stringStartWith($url, "ftp")){
$url = "https://" . $url;
}
if (preg_match(RegularExpression::URL, $url)){
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_HEADER, true);
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_setopt($handle, CURLOPT_USERAGENT, true);
$headers = curl_exec($handle);
curl_close($handle);
if (empty($failCodeList) or !is_array($failCodeList)){
$failCodeList = array(404);
}
if (!empty($headers)){
$exists = true;
$headers = explode(PHP_EOL, $headers);
foreach($failCodeList as $code){
if (is_numeric($code) and strpos($headers[0], strval($code)) !== false){
$exists = false;
break;
}
}
}
}
return $exists;
}
컬 옵션에 대해 설명하겠습니다.
CURLOPT_RETURN TRANSFER: 화면에 호출 페이지를 표시하는 대신 문자열을 반환합니다.
CURLOPT_SSL_VERIFYPEER: cUrl이 증명서를 체크아웃하지 않음
CURLOPT_HEADER: 문자열에 머리글 포함
CURLOPT_NOBDY: 문자열에 본문 포함 안 함
CURLOPT_USERAGENT: 일부 사이트에서는 정상적으로 기능하기 위해 이 기능이 필요합니다(예:https://plus.google.com).
기타 주의사항:이 기능에서는 요청을 보내기 전에 URL을 확인하기 위해 Diego Perini의 regex를 사용합니다.
const URL = "%^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@|\d{1,3}(?:\.\d{1,3}){3}|(?:(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)(?:\.(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)*(?:\.[a-z\x{00a1}-\x{ffff}]{2,6}))(?::\d+)?(?:[^\s]*)?$%iu"; //@copyright Diego Perini
추가 사항 2: 헤더 문자열과 사용자 머리글[0]을 분해하여 반환 코드와 메시지만 확인합니다(예: 200, 404, 405 등).
추가 주 3: 코드 404만 검증하는 것만으로는 불충분할 수 있습니다(유닛 테스트 참조).따라서 $failCodeList 파라미터가 옵션으로 있어 거부할 코드목록을 모두 제공합니다.
그리고 물론 코딩을 정당화하기 위한 유닛 테스트(인기 있는 모든 소셜 네트워크 포함)를 다음에 나타냅니다.
public function testIsUrlExists(){
//invalid
$this->assertFalse(ToolManager::isUrlExists("woot"));
$this->assertFalse(ToolManager::isUrlExists("https://www.facebook.com/jonathan.parentlevesque4545646456"));
$this->assertFalse(ToolManager::isUrlExists("https://plus.google.com/+JonathanParentL%C3%A9vesque890800"));
$this->assertFalse(ToolManager::isUrlExists("https://instagram.com/mariloubiz1232132/", array(404, 405)));
$this->assertFalse(ToolManager::isUrlExists("https://www.pinterest.com/jonathan_parl1231/"));
$this->assertFalse(ToolManager::isUrlExists("https://regex101.com/546465465456"));
$this->assertFalse(ToolManager::isUrlExists("https://twitter.com/arcadefire4566546"));
$this->assertFalse(ToolManager::isUrlExists("https://vimeo.com/**($%?%$", array(400, 405)));
$this->assertFalse(ToolManager::isUrlExists("https://www.youtube.com/user/Darkjo666456456456"));
//valid
$this->assertTrue(ToolManager::isUrlExists("www.google.ca"));
$this->assertTrue(ToolManager::isUrlExists("https://www.facebook.com/jonathan.parentlevesque"));
$this->assertTrue(ToolManager::isUrlExists("https://plus.google.com/+JonathanParentL%C3%A9vesque"));
$this->assertTrue(ToolManager::isUrlExists("https://instagram.com/mariloubiz/"));
$this->assertTrue(ToolManager::isUrlExists("https://www.facebook.com/jonathan.parentlevesque"));
$this->assertTrue(ToolManager::isUrlExists("https://www.pinterest.com/"));
$this->assertTrue(ToolManager::isUrlExists("https://regex101.com"));
$this->assertTrue(ToolManager::isUrlExists("https://twitter.com/arcadefire"));
$this->assertTrue(ToolManager::isUrlExists("https://vimeo.com/"));
$this->assertTrue(ToolManager::isUrlExists("https://www.youtube.com/user/Darkjo666"));
}
모두에게 큰 성공을.
몬트리올에서 온 조나단 파더-레베스크
function urlIsOk($url)
{
$headers = @get_headers($url);
$httpStatus = intval(substr($headers[0], 9, 3));
if ($httpStatus<400)
{
return true;
}
return false;
}
사이트 링크가 유효한지 확인하기 위해 몇 가지 테스트를 실행합니다.서드파티에 의해 링크가 변경되면 알림이 표시됩니다.php의 get_headers가 동작하지 않는 것을 의미하는 증명서가 제대로 설정되어 있지 않은 사이트에 문제가 있었습니다.
그래서 컬이 더 빠르다는 것을 읽고 시도하기로 했습니다.그 후 linkedin에 문제가 생겨 999 오류가 발생했는데, 이것이 사용자 에이전트의 문제임이 판명되었습니다.
증명서가 이 테스트에 유효하지 않은지, 리다이렉트인지 아닌지는 신경 쓰지 않았습니다.
그 후 컬이 실패했을 경우 get_headers를 사용할 것을 생각했습니다.
한번 해봐...
/**
* returns true/false if the $url is valid.
*
* @param string $url assumes this is a valid url.
*
* @return bool
*/
private function urlExists(string $url): bool
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // do not output response in stdout
curl_setopt($ch, CURLOPT_NOBODY, true); // this does a head request to make it faster.
curl_setopt($ch, CURLOPT_HEADER, true); // just the headers
curl_setopt($ch, CURLOPT_SSL_VERIFYSTATUS, false); // turn off that pesky ssl stuff - some sys admins can't get it right.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// set a real user agent to stop linkedin getting upset.
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36');
curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (($http_code >= 200 && $http_code < 400) || $http_code === 999) {
curl_close($ch);
return true;
}
//$error = curl_error($ch); // used for debugging.
curl_close($ch);
// just try the get_headers - it might work!
stream_context_set_default(
['http' => ['method' => 'HEAD']]
);
$file_headers = @get_headers($url);
if ($file_headers !== false) {
$response_code = substr($file_headers[0], 9, 3);
return $response_code >= 200 && $response_code < 400;
}
return false;
}
매우 빠른 속도:
function http_response($url){
$resURL = curl_init();
curl_setopt($resURL, CURLOPT_URL, $url);
curl_setopt($resURL, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($resURL, CURLOPT_HEADERFUNCTION, 'curlHeaderCallback');
curl_setopt($resURL, CURLOPT_FAILONERROR, 1);
curl_exec ($resURL);
$intReturnCode = curl_getinfo($resURL, CURLINFO_HTTP_CODE);
curl_close ($resURL);
if ($intReturnCode != 200 && $intReturnCode != 302 && $intReturnCode != 304) { return 0; } else return 1;
}
echo 'google:';
echo http_response('http://www.google.com');
echo '/ ogogle:';
echo http_response('http://www.ogogle.com');
위 용액 모두 + 설탕 추가 (최종 AIO 솔루션)
/**
* Check that given URL is valid and exists.
* @param string $url URL to check
* @return bool TRUE when valid | FALSE anyway
*/
function urlExists ( $url ) {
// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validate URI
if (filter_var($url, FILTER_VALIDATE_URL) === FALSE
// check only for http/https schemes.
|| !in_array(strtolower(parse_url($url, PHP_URL_SCHEME)), ['http','https'], true )
) {
return false;
}
// Check that URL exists
$file_headers = @get_headers($url);
return !(!$file_headers || $file_headers[0] === 'HTTP/1.1 404 Not Found');
}
예:
var_dump ( urlExists('http://stackoverflow.com/') );
// Output: true;
URL이 온라인인지 오프라인인지 확인합니다.
function get_http_response_code($theURL) {
$headers = @get_headers($theURL);
return substr($headers[0], 9, 3);
}
function url_exists($url) {
$headers = @get_headers($url);
return (strpos($headers[0],'200')===false)? false:true;
}
여기 소스 코드의 첫 번째 바이트만 읽는 솔루션이 있습니다.file_get_files가 실패하면 false를 반환합니다.이것은, 이미지와 같은 리모트 파일에도 유효합니다.
function urlExists($url)
{
if (@file_get_contents($url,false,NULL,0,1))
{
return true;
}
return false;
}
cURL은 HTTP 코드를 반환할 수 있습니다.그 모든 추가 코드가 필요없다고 생각하십니까?
function urlExists($url=NULL)
{
if($url == NULL) return false;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode>=200 && $httpcode<300){
return true;
} else {
return false;
}
}
URL이 유효한지 여부를 확인하는 다른 방법은 다음과 같습니다.
<?php
if (isValidURL("http://www.gimepix.com")) {
echo "URL is valid...";
} else {
echo "URL is not valid...";
}
function isValidURL($url) {
$file_headers = @get_headers($url);
if (strpos($file_headers[0], "200 OK") > 0) {
return true;
} else {
return false;
}
}
?>
404의 헤더를 확인할 때 고려해야 할 사항 중 하나는 사이트에서 404가 즉시 생성되지 않는 경우입니다.
많은 사이트가 PHP/ASP(et cetera) 소스에 페이지가 존재하는지 여부를 확인하고 404 페이지로 전송합니다.이 경우 헤더는 기본적으로 생성되는 404의 헤더에 의해 확장됩니다.이 경우 404 에러는 헤더의 첫 번째 행이 아니라 10번째 행에 있습니다.
$array = get_headers($url);
$string = $array[0];
print_r($string) // would generate:
Array (
[0] => HTTP/1.0 301 Moved Permanently
[1] => Date: Fri, 09 Nov 2018 16:12:29 GMT
[2] => Server: Apache/2.4.34 (FreeBSD) LibreSSL/2.7.4 PHP/7.0.31
[3] => X-Powered-By: PHP/7.0.31
[4] => Set-Cookie: landing=%2Freed-diffuser-fig-pudding-50; path=/; HttpOnly
[5] => Location: /reed-diffuser-fig-pudding-50/
[6] => Content-Length: 0
[7] => Connection: close
[8] => Content-Type: text/html; charset=utf-8
[9] => HTTP/1.0 404 Not Found
[10] => Date: Fri, 09 Nov 2018 16:12:29 GMT
[11] => Server: Apache/2.4.34 (FreeBSD) LibreSSL/2.7.4 PHP/7.0.31
[12] => X-Powered-By: PHP/7.0.31
[13] => Set-Cookie: landing=%2Freed-diffuser-fig-pudding-50%2F; path=/; HttpOnly
[14] => Connection: close
[15] => Content-Type: text/html; charset=utf-8
)
간단한 방법은 컬(그리고 FASTER도 마찬가지)입니다.
<?php
$mylinks="http://site.com/page.html";
$handlerr = curl_init($mylinks);
curl_setopt($handlerr, CURLOPT_RETURNTRANSFER, TRUE);
$resp = curl_exec($handlerr);
$ht = curl_getinfo($handlerr, CURLINFO_HTTP_CODE);
if ($ht == '404')
{ echo 'OK';}
else { echo 'NO';}
?>
get_headers()는 HTTP 요구에 대한 응답으로 서버가 보낸 헤더를 포함하는 배열을 반환합니다.
$image_path = 'https://your-domain.com/assets/img/image.jpg';
$file_headers = @get_headers($image_path);
//Prints the response out in an array
//print_r($file_headers);
if($file_headers[0] == 'HTTP/1.1 404 Not Found'){
echo 'Failed because path does not exist.</br>';
}else{
echo 'It works. Your good to go!</br>';
}
get_headers()를 사용한 지금까지의 답변 중 가장 간단한 것은 문자열 "200 ok"를 확인하는 것입니다.확인하는 것보다 훨씬 좋습니다.
$file_headers = @get_headers($file-path);
$file_headers[0];
어레이 키 번호가 다를 수 있습니다.'200 OK' 체크하는 게 제일 좋아요up된 URL은 get_headers() 응답의 임의의 위치에 "200 ok"가 있습니다.
function url_exist($url) {
$urlheaders = get_headers($url);
//print_r($urlheaders);
$urlmatches = preg_grep('/200 ok/i', $urlheaders);
if(!empty($urlmatches)){
return true;
}else{
return false;
}
}
이제 true인지 false인지 함수를 확인합니다.
if(url_exist(php-url-variable-here)
URL exist
}else{
URL don't exist
}
오래된 실타래가긴 하지만..이렇게 하겠습니다.
$file = 'http://www.google.com';
$file_headers = @get_headers($file);
if ($file_headers) {
$exists = true;
} else {
$exists = false;
}
언급URL : https://stackoverflow.com/questions/2280394/how-can-i-check-if-a-url-exists-via-php
'programing' 카테고리의 다른 글
open with 문을 사용하여 파일을 여는 방법 (0) | 2023.01.13 |
---|---|
마이그레이션 데이터를 MariaDB 데이터베이스로 가져올 수 없습니다. (0) | 2023.01.13 |
MySQL에서 하나의 쿼리에서 값이 다른 여러 행을 업데이트합니다. (0) | 2023.01.13 |
ERROR 1698 (28000):ubuntu에서 새로 설치할 때 mysql_secure_installation을 실행하는 동안 사용자 'root'@'localhost'에 대한 액세스가 거부되었습니다. (0) | 2023.01.13 |
Kubernetes의 Mariadb 통신 패킷을 읽는 동안 오류가 발생했습니다. (0) | 2023.01.13 |