此代码通过从中获取所有href
属性来分析两个网站的内容。然后,它找到与每个数组的href值匹配最高的那些并将它们保存为CSV文件。问题是,当我打开文件时,它还会返回我的应用程序的HTML数据。
作为练习,我只能使用HTML和PHP
<html>
<body>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
website:
<input type="text" name="website1">
<br>
website:
<input type="text" name="website2">
<br>
<input type="submit" name="submit">
</form>
</body>
</html>
<?php
if (isset($_POST['submit']))
{
// form has been submitted
$url1 = $_POST['website1'];
$url2 = $_POST['website2'];
findAndCompare($url1, $url2);
}
else
{
}
function findAndCompare($url1, $url2)
{
libxml_use_internal_errors(true);
// Create a DOM parser object
$dom1 = new DOMDocument();
$dom2 = new DOMDocument();
$dom1->loadHTMLFile($url1);
$dom2->loadHTMLFile($url2);
$arr1 = array();
$arr2 = array();
$arr3 = array();
// Iterate over all the <a> tags
foreach($dom1->getElementsByTagName('a') as $link)
{
// insert the <a href> in arr1
array_push($arr1, $link->getAttribute('href'));
}
// Iterate over all the <a> tags
foreach($dom2->getElementsByTagName('a') as $link)
{
// insert the <a href> in arr2
array_push($arr2, $link->getAttribute('href'));
}
for ($i = 0; $i < count($arr1); $i++)
{
$max_elem = $arr2[0];
$max = 0;
for ($j = 0; $j < count($arr2); $j++)
{
similar_text($arr1[$i], $arr2[$j], $perc);
if ($perc > $max)
{
$max = $perc;
$max_elem = $arr2[$j];
}
}
$tmp = array($arr1[$i],$max_elem,$max);
array_push($arr3,$tmp);
}
function convert_to_csv($input_array, $output_file_name, $delimiter)
{
$temp_memory = fopen('php://memory', 'w');
// loop through the array
foreach($input_array as $line)
{
// use the default csv handler
fputcsv($temp_memory, $line, $delimiter);
}
fseek($temp_memory, 0);
// modify the header to be CSV format
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="' . $output_file_name . '";');
// output the file to be downloaded
fpassthru($temp_memory);
}
convert_to_csv($arr3, 'export.csv', ',');
}
?>
更新
我在ob_clean();
header
答案 0 :(得分:1)
确实会输出HTML,因为这是您的代码所做的第一件事。
如您所知,PHP允许在单个文件中混合使用HTML和代码,方法是使用<?php
和?>
标记来表示PHP代码的开头和结尾。
这些标记之外的所有内容都被视为输出,并以与您使用print()
或echo()
语句完全相同的方式发送到浏览器。
您的代码以HTML块开头,之前没有任何内容。这与使用包含此HTML的print()
语句启动程序完全相同。
如果您不想在所有情况下输出HTML,那么您需要一些代码才能告诉它何时以及是否输出它。
答案 1 :(得分:0)
如果已有输出,则无法使用header()
。
将表单html移动到第一个else语句中。
此外,请确保启用错误报告,因为php会向您明确说明。