不需要 html 写入文本文件
writing not required html to a text file
我正在将我的输出写入文本文件,然后使用 php 下载它,但问题是它正在保存输出,但它也将 HTML 的整个结构保存到文本文件中还。我不知道为什么它的发生试图解决它但没有弄清楚如何解决。
我想保存来自 fwrite($fh, $formatted_url."\n");
的输出
下面是我的代码:
function get_m3u8_video_segment($url,$portnum=80,$from,$to)
{
$file_name="urlscan.txt";
$fh = fopen($file_name, 'w') or die("Unable to open file!");
for ($x = $from; $x <= $to; $x++)
{
$formatted_url="{$url}:{$portnum}/s-{$x}.m3u8";
//echo "URL is: $formatted_url <br>";
//$contents = file_get_contents($formatted_url);
$contents = get_web_page( $formatted_url );
if ((strpos($contents, 'not found') !== false)||(strpos($contents, 'EXTM3U') !== false))
{
echo" $formatted_url<br>";
fwrite($fh, $formatted_url."\n");
}
}
//header download
header("Content-Disposition: attachment; filename=\"" . $file_name . "\"");
header("Content-Type: application/force-download");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header("Content-Type: text/plain");
}
get_m3u8_video_segment($url,$portnum,$from,$to);
}
如果您的 PHP 脚本中的其他地方有其他 HTML 内容,那么它也将按正常方式输出,除非在这种情况下它将成为下载文件的一部分。如果您不希望这种情况发生,那么您必须在输出您真正想要的内容后使用 exit();
命令停止您的脚本。在您的脚本中,看起来您可以在调用函数后立即执行此操作。 (但如果您在此之前已经输出了一些 HTML,则需要对脚本进行更大幅度的更改。)
N.B。我很惊讶你没有收到关于 headers 已经发送的警告?如果您在回显某些内容后尝试设置 headers,通常会发生这种情况。检查您的日志文件。通常你应该先输出 headers。
此外,除非您想将其保留用于其他目的,否则将任何内容保存到 urlscan.txt
是没有用的 - 它不会在您的下载过程中发挥任何作用。而且每次执行此脚本时它都会被覆盖。 headers 将导致浏览器将输出内容(即 PHP 脚本发送到常规输出的任何内容)视为文本文件 - 但这与文本文件不同您服务器的磁盘,其内容可能不同。
您输出的内容(通过 echo" $formatted_url<br>";
)恰好与您添加到 urlscan 文件(通过 fwrite($fh, $formatted_url."\n");
)的内容相似,我认为这可能会让您感到困惑,认为您是输出 urlscan.txt
的内容,但你不是 - 你的 PHP header 告诉浏览器处理你脚本的输出(通常只会进入浏览器 window 作为 HTML 页面)作为文件 - 但它是 a) 一个新文件,b) 在到达浏览器之前实际上根本不是文件,它只是对 HTTP 请求的响应。浏览器根据其解释 headers.
的方式将其转换为客户端计算机上的文件
还有一点:你输出的内容需要是文本格式,而不是HTML,所以你需要把你的echo
里面的<br>
改成\n
.
最后,你把content-typeheader输出了两次,这是胡说八道。 HTTP 请求或响应只能有一种内容类型。在这种情况下,text/plain 是有效的 MIME 类型,另一个不是真实的。
考虑到以上所有因素,您的代码可能会更好地编写为:
function get_m3u8_video_segment($url, $portnum=80, $from, $to)
{
//header download
$file_name="urlscan.txt";
header("Content-Disposition: attachment; filename=\"" . $file_name . "\"");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header("Content-Type: text/plain");
for ($x = $from; $x <= $to; $x++)
{
$formatted_url="{$url}:{$portnum}/s-{$x}.m3u8";
$contents = get_web_page( $formatted_url );
if ((strpos($contents, 'not found') !== false)||(strpos($contents, 'EXTM3U') !== false))
{
echo" $formatted_url\n";
}
}
}
get_m3u8_video_segment($url, $portnum, $from, $to);
exit();
我正在将我的输出写入文本文件,然后使用 php 下载它,但问题是它正在保存输出,但它也将 HTML 的整个结构保存到文本文件中还。我不知道为什么它的发生试图解决它但没有弄清楚如何解决。
我想保存来自 fwrite($fh, $formatted_url."\n");
下面是我的代码:
function get_m3u8_video_segment($url,$portnum=80,$from,$to)
{
$file_name="urlscan.txt";
$fh = fopen($file_name, 'w') or die("Unable to open file!");
for ($x = $from; $x <= $to; $x++)
{
$formatted_url="{$url}:{$portnum}/s-{$x}.m3u8";
//echo "URL is: $formatted_url <br>";
//$contents = file_get_contents($formatted_url);
$contents = get_web_page( $formatted_url );
if ((strpos($contents, 'not found') !== false)||(strpos($contents, 'EXTM3U') !== false))
{
echo" $formatted_url<br>";
fwrite($fh, $formatted_url."\n");
}
}
//header download
header("Content-Disposition: attachment; filename=\"" . $file_name . "\"");
header("Content-Type: application/force-download");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header("Content-Type: text/plain");
}
get_m3u8_video_segment($url,$portnum,$from,$to);
}
如果您的 PHP 脚本中的其他地方有其他 HTML 内容,那么它也将按正常方式输出,除非在这种情况下它将成为下载文件的一部分。如果您不希望这种情况发生,那么您必须在输出您真正想要的内容后使用 exit();
命令停止您的脚本。在您的脚本中,看起来您可以在调用函数后立即执行此操作。 (但如果您在此之前已经输出了一些 HTML,则需要对脚本进行更大幅度的更改。)
N.B。我很惊讶你没有收到关于 headers 已经发送的警告?如果您在回显某些内容后尝试设置 headers,通常会发生这种情况。检查您的日志文件。通常你应该先输出 headers。
此外,除非您想将其保留用于其他目的,否则将任何内容保存到 urlscan.txt
是没有用的 - 它不会在您的下载过程中发挥任何作用。而且每次执行此脚本时它都会被覆盖。 headers 将导致浏览器将输出内容(即 PHP 脚本发送到常规输出的任何内容)视为文本文件 - 但这与文本文件不同您服务器的磁盘,其内容可能不同。
您输出的内容(通过 echo" $formatted_url<br>";
)恰好与您添加到 urlscan 文件(通过 fwrite($fh, $formatted_url."\n");
)的内容相似,我认为这可能会让您感到困惑,认为您是输出 urlscan.txt
的内容,但你不是 - 你的 PHP header 告诉浏览器处理你脚本的输出(通常只会进入浏览器 window 作为 HTML 页面)作为文件 - 但它是 a) 一个新文件,b) 在到达浏览器之前实际上根本不是文件,它只是对 HTTP 请求的响应。浏览器根据其解释 headers.
还有一点:你输出的内容需要是文本格式,而不是HTML,所以你需要把你的echo
里面的<br>
改成\n
.
最后,你把content-typeheader输出了两次,这是胡说八道。 HTTP 请求或响应只能有一种内容类型。在这种情况下,text/plain 是有效的 MIME 类型,另一个不是真实的。
考虑到以上所有因素,您的代码可能会更好地编写为:
function get_m3u8_video_segment($url, $portnum=80, $from, $to)
{
//header download
$file_name="urlscan.txt";
header("Content-Disposition: attachment; filename=\"" . $file_name . "\"");
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header("Content-Type: text/plain");
for ($x = $from; $x <= $to; $x++)
{
$formatted_url="{$url}:{$portnum}/s-{$x}.m3u8";
$contents = get_web_page( $formatted_url );
if ((strpos($contents, 'not found') !== false)||(strpos($contents, 'EXTM3U') !== false))
{
echo" $formatted_url\n";
}
}
}
get_m3u8_video_segment($url, $portnum, $from, $to);
exit();