我在php中有下一个代码
<?
$stop_ips_masks = array(
"66\.249\.[6-9][0-9]\.[0-9]+",
"74\.125\.[0-9]+\.[0-9]+",
);
foreach ( $stop_ips_masks as $k=>$v )
{
if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
echo found;
}
?>
它工作正常。但是我想从txt文件中加载这个数组,所以我编写了代码
<?
$stop_ips_masks = file('array.txt');
foreach ( $stop_ips_masks as $k=>$v )
{
if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
echo found;
}
?>
其中array.txt是
"66\.249\.[6-9][0-9]\.[0-9]+",
"74\.125\.[0-9]+\.[0-9]+",
并且此代码不起作用。请帮我解决我的代码有什么问题?
答案 0 :(得分:1)
您需要先将文本转换为数组,因为您现在正在执行的操作包含正则表达式模式中的,
$stop_ips_masks = file_get_contents('array.txt');
$stop_ips_masks = explode("," $stop_ips_masks);
您可能还需要执行修剪操作并删除换行符。如果你坚持一个记录分隔符会更容易。像逗号或换行符。不是两个。
如果从文本文件中删除,
,则可以执行
$stop_ips_masks = file('array.txt');
答案 1 :(得分:0)
我相信你的问题是引号和尾随逗号。虽然需要在php中创建一个数组,但它们在从文件中获取时是无效的。
$stop_ips_masks = file('array.txt', FILE_IGNORE_NEWLINES);
foreach ( $stop_ips_masks as $k=>$v )
{
$v = trim(rtrim($v, ","), '"');
if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
echo found;
}
答案 2 :(得分:0)
另一种选择是将字符串“raw”作为行存储在文件中:
66\.249\.[6-9][0-9]\.[0-9]+
74\.125\.[0-9]+\.[0-9]+
然后读取文件,将每一行放入数组中:
$array = file('array.txt');
答案 3 :(得分:0)
尝试类似的事情;
<?
$file = file('array.txt');
$stop_ips_masks = explode(",",$file);
foreach ( $stop_ips_masks as $k=>$v )
{
if ( preg_match( '#^'.$v.'$#', $_SERVER['REMOTE_ADDR']) )
echo found;
}
?>