服务器在 WordPress 上表现不同的问题
Issue with servers behaving differently on WordPress
我们有三台服务器 运行 我们的主要站点。他们使用 Window Server 2008 R2,完全修补/更新,和 MySQL 5.5.
第一台和第二台服务器没有问题。但是,第三台服务器(在物理上与第二台服务器相同,但网络有点不同 - 第二台服务器使用 Meraki 设备)有问题。
我们实现了一个自定义的 WordPress 插件,它使用 getimagesize() 函数(通常在函数前面使用 @,但我已经删除它以尝试查看错误)。我还禁用了 Windows 防火墙以覆盖我的基地。
在第三台服务器上,加载WordPress后端时,停在包含以下代码的函数处。日志显示没有具体错误,页面错误只是超过了最大时间(目前测试此问题为 6 分钟)。 php 是 运行 通过 IIS7 上的 FastCGI。
任何有关可能导致此问题的见解都将不胜感激!
这是循环:
$doc = new DOMDocument;
$internalErrors = libxml_use_internal_errors(true);
$doc->loadHTML($contentNoReferences);
libxml_use_internal_errors($internalErrors);
$totalImages = 0;
// Gather image data
foreach($doc->getElementsByTagName('img') as $img)
{
$fileName = $img->getAttribute('src');
$ignoreFileDimensions = true;
// Exclusion cases... CTAs, charts, infographics, graphs, and diagrams (treat _ as -)
$checkName = str_replace('_', '-', $fileName);
if(strpos($checkName, '-CTA-') === false &&
strpos($checkName, '-CTA.') === false &&
stripos($checkName, '-chart-') === false &&
stripos($checkName, '-chart.') === false &&
stripos($checkName, '-diagram-') === false &&
stripos($checkName, '-diagram.') === false &&
stripos($checkName, 'infograph') === false &&
stripos($checkName, 'graph') === false)
{
$ignoreFileDimensions = false;
}
$totalImages++;
$lastSlash = strrpos(str_replace('\', '/', $fileName), '/');
$fileName = substr($fileName, $lastSlash + 1, strlen($fileName));
$fileStats = getimagesize(get_option('siteurl') . '/../images/' . $fileName);
if($ignoreFileDimensions)
{
$fileStats[0] = -1;
$fileStats[1] = -1;
}
if($fileStats)
{
$images[] = array('filename' => $fileName, 'type' => $fileStats['mime'],
'width' => $fileStats[0], 'height' => $fileStats[1],
'size' => remote_file_size(get_option('siteurl') . '/../images/' . $fileName),
'class' => $img->getAttribute('class'),
'title' => $img->getAttribute('title'), 'alt' => $img->getAttribute('alt'));
}
}
我找到问题了。
我们的 CDN 响应迅速并且没有错误,但是当文件在本地时,中间会有一些 ip 查找,每个都会增加文件访问的延迟。
这最终导致超时。
我们有三台服务器 运行 我们的主要站点。他们使用 Window Server 2008 R2,完全修补/更新,和 MySQL 5.5.
第一台和第二台服务器没有问题。但是,第三台服务器(在物理上与第二台服务器相同,但网络有点不同 - 第二台服务器使用 Meraki 设备)有问题。
我们实现了一个自定义的 WordPress 插件,它使用 getimagesize() 函数(通常在函数前面使用 @,但我已经删除它以尝试查看错误)。我还禁用了 Windows 防火墙以覆盖我的基地。
在第三台服务器上,加载WordPress后端时,停在包含以下代码的函数处。日志显示没有具体错误,页面错误只是超过了最大时间(目前测试此问题为 6 分钟)。 php 是 运行 通过 IIS7 上的 FastCGI。
任何有关可能导致此问题的见解都将不胜感激!
这是循环:
$doc = new DOMDocument;
$internalErrors = libxml_use_internal_errors(true);
$doc->loadHTML($contentNoReferences);
libxml_use_internal_errors($internalErrors);
$totalImages = 0;
// Gather image data
foreach($doc->getElementsByTagName('img') as $img)
{
$fileName = $img->getAttribute('src');
$ignoreFileDimensions = true;
// Exclusion cases... CTAs, charts, infographics, graphs, and diagrams (treat _ as -)
$checkName = str_replace('_', '-', $fileName);
if(strpos($checkName, '-CTA-') === false &&
strpos($checkName, '-CTA.') === false &&
stripos($checkName, '-chart-') === false &&
stripos($checkName, '-chart.') === false &&
stripos($checkName, '-diagram-') === false &&
stripos($checkName, '-diagram.') === false &&
stripos($checkName, 'infograph') === false &&
stripos($checkName, 'graph') === false)
{
$ignoreFileDimensions = false;
}
$totalImages++;
$lastSlash = strrpos(str_replace('\', '/', $fileName), '/');
$fileName = substr($fileName, $lastSlash + 1, strlen($fileName));
$fileStats = getimagesize(get_option('siteurl') . '/../images/' . $fileName);
if($ignoreFileDimensions)
{
$fileStats[0] = -1;
$fileStats[1] = -1;
}
if($fileStats)
{
$images[] = array('filename' => $fileName, 'type' => $fileStats['mime'],
'width' => $fileStats[0], 'height' => $fileStats[1],
'size' => remote_file_size(get_option('siteurl') . '/../images/' . $fileName),
'class' => $img->getAttribute('class'),
'title' => $img->getAttribute('title'), 'alt' => $img->getAttribute('alt'));
}
}
我找到问题了。
我们的 CDN 响应迅速并且没有错误,但是当文件在本地时,中间会有一些 ip 查找,每个都会增加文件访问的延迟。
这最终导致超时。