【发布时间】:2012-01-17 18:17:04
【问题描述】:
有点奇怪,我有一个 PHP 文件,有时会出现 404 错误。这是我制作的一个wordpress插件的ajax回调页面。
例如:
明明是PHP文件还是第一个链接失效了,那为什么第二个链接失效了呢?
有趣的是,麻烦的链接在我的服务器上使用完全相同的代码可以正常工作:http://petewilliams.info/blog2/wp-content/plugins/amazon-affiliate-link-localizer/ajax.php?strAction=search&strLink=http://www.amazon.com/dp/B000IZGIA8
遗憾的是,我无法直接访问出现问题的服务器,但我可以要求进行更改。不仅仅是这个网站有问题,脚本的其他一些用户也有同样的问题。
这是该文件的源代码,内容不多:
<?php
header("Content-type: application/javascript");
switch ( $_REQUEST['strAction'] ) {
case 'search':
searchLink();
break;
case 'version':
echo "1.7b";
break;
default:
checkLinks();
break;
}
function checkLinks() {
// get URL
$strTld = $_REQUEST['strTld'];
$strAffiliateId = $_REQUEST['strAffiliateId'];
$strLinks = $_REQUEST['strLinks'];
$arrLinks = explode( '|', $strLinks );
foreach ( $arrLinks as $strAsin ) {
$strLink = "http://www.amazon.$strTld/exec/obidos/ASIN/$strAsin/$strAffiliateId";
$arrHeaders = get_headers($strLink, 1);
// if not found, then search for it
if ( strpos( $arrHeaders[0], '404' ) || strpos( $arrHeaders[1], '404' ) ) {
echo "arrLinksToCheck[ '$strAsin' ].searchLink();\n";
} else {
echo "arrLinksToCheck[ '$strAsin' ].localiseLink();\n";
}
}
}
function searchLink() {
$strHtml = file_get_contents( $_REQUEST['strLink'], false, null, -1, 100000 );
$strPattern = '/canonical" href="http:\/\/(.*)\/(.*)\/dp\/([A-Z0-9]{10})/';
preg_match( $strPattern, $strHtml, $arrMatches );
$strTitle = str_replace( '-', '%20', $arrMatches[2] );
// the canonical ASIN is sometimes different to the original one which confuses the JS, so use the one in the original link
$strPattern2 = '/\/([A-Z0-9]{10})/';
preg_match( $strPattern2 , $_REQUEST['strLink'], $arrUrlMatches );
$strAsin = is_array( $arrUrlMatches ) ? $arrUrlMatches[1] : $arrMatches[3];
echo "arrLinksToCheck[ '{$strAsin}' ].writeSearchLink( '$strTitle' );\n";
}
有人对发生了什么有任何想法吗?
谢谢
皮特
【问题讨论】:
标签: php javascript ajax wordpress http-status-code-404