Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript检查m3u8 URL是否中断_Javascript_Jquery_Ajax - Fatal编程技术网

使用Javascript检查m3u8 URL是否中断

使用Javascript检查m3u8 URL是否中断,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用以下代码来确定m3u8 URL是否已损坏。我使用两个不同的URL进行测试,一个在线,一个离线。对于这两种情况,我的javascript函数不会提醒我是否找到了文件,firefox调试也不会给我任何错误,但状态变量始终显示0。谁能告诉我我做错了什么 编辑: 代码: 函数testFunction(){ //m=”http://someothersite.com/offline.m3u8"; m=”http://somesite.com/workingfile.m3u8"; //现在我们检查文

我使用以下代码来确定m3u8 URL是否已损坏。我使用两个不同的URL进行测试,一个在线,一个离线。对于这两种情况,我的javascript函数不会提醒我是否找到了文件,firefox调试也不会给我任何错误,但状态变量始终显示0。谁能告诉我我做错了什么

编辑:

代码:


函数testFunction(){
//m=”http://someothersite.com/offline.m3u8";
m=”http://somesite.com/workingfile.m3u8";
//现在我们检查文件是否存在
URLEISTS(m,函数(状态){
警报(“状态:”+状态);
如果(状态===200){
//文件被找到
警报(“找到文件”+m);
}
否则如果(状态===404){
//404找不到
警报(“未找到文件”+m);
}
});
函数UrlExists(url,cb){
jQuery.ajax({
url:url,
数据类型:“文本”,
键入:“GET”,
完成:函数(xhr){
警报(+xhr.状态);
如果(cb的类型==‘函数’)
cb.适用(本[xhr.状态]);
}
});
}
}//干管末端
点击我

如果您使用外部URL,这将不起作用,因为CORS(跨源资源共享)将启动并阻止您,因为您不在同一域中

工作版本:仅限本地文件

UrlExists('/path/file.php', function(status){
    if(status === 200){
       alert('file found');
    }
    else if(status === 404){
       alert('file not found');
    }
});
不幸的是,没有一种通过Javascript实现这一点的有效方法。但是,您可以通过后端功能(例如PHP)来执行此操作

$file = 'http://www.othername.com/somefile.jpg';
$file_headers = @get_headers($file);

if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
}
如果您将其构建到一个php函数中,然后使用Ajax功能将URL传递给php进行验证,然后返回一个响应,那么它应该可以工作

编辑:卷曲示例

$mainUrl = curl_init($url);
curl_setopt($mainUrl,  CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($mainUrl);

$httpCode = curl_getinfo($mainUrl, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    echo "404 Error";
}else if($httpCode == 200){
    echo "200 Error";
}else{
    echo "all good - sort off...";
}

curl_close($mainUrl);

这里是Curl选项——现在我要做的(我真的必须这么做…)是循环页面上的每个URL(在js中),并将其作为对象发送到PHP(通过Ajax)。对于PHP,我会使用上面的CURL功能来确认哪些是坏的(使用1或0),然后返回一个响应。

感谢您的回复。对于图像文件,javascript可以工作!为什么跨域不是问题?我在firebug的m3u8链接上没有收到任何跨域错误!此外,如果我使用php作为URL列表,它会在服务器端消耗大量资源吗?要使get_头工作,需要在服务器端启用什么?对于图像,它是不同的,因此对于图像,您可以在图像中使用
onerror=“javascriptFunction()”
。现在,对于图像,它们需要直接从
pageload
上的URL加载。对于链接,它们只是静态字符串,直到用户单击它,然后被带到目的地。这是一个ajax调用,所以请仔细检查网络选项卡,看看您得到的响应是什么。。。是的,内存使用率会很高,但不要认为它会耗尽您的服务器。有多种方法可以检查链接是否处于活动状态(
get_headers
是一个示例,
curl
是另一个示例)我尝试获取您的链接头代码,但没有打印任何内容?如何检查我测试的服务器是否允许get_头方法?您认为get_uuheader方法比curl更好?@user1788736更新了curl示例。
get_头
代码只会在变量中返回
true
false
。这是在if语句之外使用该变量所做的事情
get_header
很好,
curl
也很好(它们都有自己的位置),所以我放置了两个示例我测试了你的php解决方案,测试了一个不存在的文件,脚本需要永远停止,我用$httpcode=0得到0!(适用于可下载的m3u8,脚本快速停止并显示200)是否有办法在几秒钟后超时,并向用户输出m3u8 url已损坏?
$file = 'http://www.othername.com/somefile.jpg';
$file_headers = @get_headers($file);

if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
}
$mainUrl = curl_init($url);
curl_setopt($mainUrl,  CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($mainUrl);

$httpCode = curl_getinfo($mainUrl, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    echo "404 Error";
}else if($httpCode == 200){
    echo "200 Error";
}else{
    echo "all good - sort off...";
}

curl_close($mainUrl);