Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php endsWith函数在一台服务器上失败,但在另一台服务器上工作?_Php_Server_Explode_Ends With - Fatal编程技术网

php endsWith函数在一台服务器上失败,但在另一台服务器上工作?

php endsWith函数在一台服务器上失败,但在另一台服务器上工作?,php,server,explode,ends-with,Php,Server,Explode,Ends With,我有一个脚本,它本质上是一个索引新闻文章的爬虫。该脚本在一台服务器(主http服务器)上运行良好,但我正在尝试将其移动到专用平台,其中一个部分将无法运行 失败的部分使用一个简单的函数(来自SO)检查字符串(爬虫程序找到的url)是否与本地存储在.txt文件中的排除列表匹配 我已经测试过,以确保使用var_转储接收.txt文件,并且所有内容都显示正常 这始终无法取消设置或回显积极信息,但在另一台服务器上一切正常 重要部分如下: <?php ini_set('display_errors',

我有一个脚本,它本质上是一个索引新闻文章的爬虫。该脚本在一台服务器(主http服务器)上运行良好,但我正在尝试将其移动到专用平台,其中一个部分将无法运行

失败的部分使用一个简单的函数(来自SO)检查字符串(爬虫程序找到的url)是否与本地存储在.txt文件中的排除列表匹配

我已经测试过,以确保使用var_转储接收.txt文件,并且所有内容都显示正常

这始终无法取消设置或回显积极信息,但在另一台服务器上一切正常

重要部分如下:

<?php
ini_set('display_errors', 1);
$linkurl_reg = '/href="http:\/\/metro.co.uk(.+?)"/is';    


function endsWith($haystack, $needle)
{
return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}

$data = file_get_contents("http://metro.co.uk");
preg_match_all($linkurl_reg,$data,$new_links);

$exclusion_list = explode("\n",file_get_contents('../F/exclusion_list.txt'));

var_dump($exclusion_list); //just to check we got the file ok

for($i = '0';$i < count($new_links[1]) ; $i++){
        for ($ii = '0';$ii < count($exclusion_list);$ii++){
        if(endsWith($new_links[1][$i], $exclusion_list[$ii])){echo 'unset ';unset($new_links[1][$i]);}else{echo'not unset ';}
        }
    }


?> 
而不是

$exclusion_list = explode("\n",file_get_contents('../F/exclusion_list.txt'));
它将适用于该特定字符串

如果有人有什么想法,请告诉我,我已经盯着这个看了三天了,我完全被难住了

我尝试过的事情:

在分解之前将$exclusion\u列表数组编码为UTF

将$exclusion\u列表字符串编码为循环中的UTF

使用普通字符串测试函数

手动写入字符串,而不是从数组或fileget写入字符串(工作起来很麻烦)

将文件扩展名从.txt更改为各种其他内容

在服务器上更新php版本(非工作版本)

在爆炸期间将“\n”替换为“\r”和“\n\r”

我甚至尝试将该函数更改为在上找到的其他函数,奇怪的是,我得到了相同的结果(适用于我定义的字符串,但不适用于从排除列表文件检索到的任何内容)

就我的一生而言,我不知道为什么一个会工作而另一个不会

当前PHP版本:5.4.36-0+deb7u3(非工作服务器)

当前PHP版本:5.2.17(工作服务器)

为$Exclution list请求的var_转储(非工作服务器):

请求的$Exclution列表的var_转储(工作服务器):


这两台服务器都是linux,两个文本文件都不是在windows平台上生成或编辑的

如果您的服务器或计算机中有一台使用windows,那么您可能在行尾编码方面有问题:\r\n在windows上和\n在unix上(我想\r在iOS上,但我不确定)

请确保,*.txt文件中的行由\n not\r\n分隔,如果保存在windows程序中,则会发生这种情况

否则,在用“\n”分解后,字符串将全部以“\r”结尾,因此可能无法填充endsWith()条件

此代码应适用于两台机器:

$exclusion_list = explode("\n",str_replace("\r", "", file_get_contents('../F/exclusion_list.txt')));

文件中可能存在一些问题,请尝试使用其他文件,检查是否显示相同的问题。

您能
var\u dump($exclusion\u list)
在工作和损坏的服务器上运行吗?@slugonamission刚刚为您添加。鉴于此,我将查看以下所有答案。
var\u dump
输出显示“损坏”服务器上的额外字符,这些字符可能是
\r
\n
字符。不幸的是,这两个服务器都是linux,我会将其添加到我尝试过的列表中,太多了,我完全忘记我尝试过了。不过还是要谢谢你!!服务器是否是linux并不重要。txt文件保存在哪台机器上很重要。你有没有试着用我在上面给你的版本来替换你的爆炸命令?如果这不起作用,请把echo$指针放进去。" | " . substr($haystack,-strlen($needle));如果您不知道我有多么感激您,我肯定会注意到,当我在explode中更改“\n”时,这项功能不起作用,但我将永远无法再次检查。从字面上说,你恢复了我对社会的信心:-)两台服务器都是linux不幸的是,我希望它能这么简单,不过非常感谢您的回复
array(9) {
  [0]=>
  string(6) ".jpeg"
  [1]=>
  string(5) ".jpg"
  [2]=>
   string(5) ".gif"
  [3]=>
  string(5) ".css"
  [4]=>
  string(5) ".xml"
  [5]=>
  string(11) "xmlrpc.php"
  [6]=>
  string(21) "metro.co.uk" target="
  [7]=>
  string(20) "metro.co.uk/osd.xml"
  [8]=>
  string(32) "metro.co.uk/terms/#privacypolicy"
}
array(9) {
  [0]=>
  string(5) ".jpeg"
  [1]=>
  string(4) ".jpg"
  [2]=>
  string(4) ".gif"
  [3]=>
  string(4) ".css"
  [4]=>
  string(4) ".xml"
  [5]=>
  string(10) "xmlrpc.php"
  [6]=>
  string(20) "metro.co.uk" target="
  [7]=>
  string(19) "metro.co.uk/osd.xml"
  [8]=>
  string(32) "metro.co.uk/terms/#privacypolicy"
}
$exclusion_list = explode("\n",str_replace("\r", "", file_get_contents('../F/exclusion_list.txt')));