为什么Facebook抓取我的php服务器端脚本与其他OG验证程序不同?
首先,我是PHP新手,这是我第一个动态提供og标记的脚本 Facebook OG调试页面似乎以某种方式获得了实际的php脚本,我认为这是不可能的。我目前对服务器端脚本的理解是,服务器应该只执行它们,而不显示它们?为什么Facebook抓取我的php服务器端脚本与其他OG验证程序不同?,php,facebook-opengraph,Php,Facebook Opengraph,首先,我是PHP新手,这是我第一个动态提供og标记的脚本 Facebook OG调试页面似乎以某种方式获得了实际的php脚本,我认为这是不可能的。我目前对服务器端脚本的理解是,服务器应该只执行它们,而不显示它们? 看起来Facebook正在抓取我的php的初始化代码,而不是它的最终执行。除非我对php变量作用域的理解有偏差??我完全困惑不解 这是我的php逻辑。我将php变量$ogTitle和$ogImage初始化为一些默认字符串,然后根据php从url上指定的xml/媒体中刮取的内容继续更新相
看起来Facebook正在抓取我的php的初始化代码,而不是它的最终执行。除非我对php变量作用域的理解有偏差??我完全困惑不解 这是我的php逻辑。我将php变量$ogTitle和$ogImage初始化为一些默认字符串,然后根据php从url上指定的xml/媒体中刮取的内容继续更新相同的变量 这是我的PHP
<?php
// Set the defaults...
$ogTitle=".Universal Media Thru Internet." ;
// the following inserted for debug to prove facebook is grabbing this value ??? instead of the final derived one.
$ogTitle="الباء WRONG TITLE MEANT TO BE THE DEFAULT IF PHP DOES NOT DYNAMICALLY DERIVE ONE" ;
$ogDescription="Mumti the Next Generation" ;
$ogUrl = "http://mumti.org" ;
// 20180413
if ($_GET['ms'] != '') {
$url = $_GET['ms'];
}
if ($_GET['mq'] != '') {
$url = $_GET['mq'];
}
if ($url != '') {
$xml=simplexml_load_file($url) or die("Error: Cannot access XML $url");
//
$Pic = $xml->SLIDE[0]->PIC;
$rcbmp_root = $xml->rcbmp_root;
// -) derive final path for image
if ($rcbmp_root == "")
$ogImage = dirname($url) . "/" . $Pic ;
else
$ogImage = dirname($url) . "/" . $rcbmp_root . $Pic ;
//
$ogTitle = $xml->SLIDE[0]->TXT;
// Cleanup the ogImage URL (aka path normalization)
$u = parse_url(strtolower($ogImage)); // returns the URL components in associative-array
$u['path'] = simplify($u['path']); // removes the .. notations from the path component
$ogImage = "{$u['scheme']}://{$u['host']}{$u['path']}"; // piece the components together into a URL
}
?>
它显示正确的og:title和有效的og:image,如下所示:
<meta lang="ar" property="og:title" content="البَاءُ" />
<meta property="og:image" content="http://arabicrescue.com/ar/arabic/letters.bmp/400_1/02.png">
然而,使用完全相同的URL,Facebook调试页面坚持认为有问题
Facebook似乎从“if($url!=''){…”评估中获取了我的php脚本的初始化值,而没有任何内容
谢谢你对这件事的解释,因为我没能向facebook bug报告解释我自己(
Facebook的修复方案是提供og:url作为实际url,而不仅仅是网站的根url。否则,它会将og:title显示为null(即“”),并将og:image和一些较旧的图像(我的网站徽标)显示为爬虫机器人不久前抓取的图像。这是我无法真正理解和解释的 不管怎样,使用下面的附加php代码,facebook将正确返回标题和图像
<meta lang="ar" property="og:title" content="البَاءُ" />
<meta property="og:image" content="http://arabicrescue.com/ar/arabic/letters.bmp/400_1/02.png">
$ogImage = str_replace( " ", "%20", $ogImage );
// -) provide canonical url
// https://stackoverflow.com/questions/6768793/get-the-full-url-in-php
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$ogUrl = str_replace( " ", "%20", strtolower($actual_link) );