PHP Добавление объектов в массив из текстового файла

Я пытаюсь добавить IP-адреса в массив, но не могу заставить его работать правильно
Может кто-то увидеть, какую ошибку я делаю, или порекомендовать другое решение?

$ipAddress = $_SERVER['REMOTE_ADDR'];
$include = include "ip.txt";

$array = array($include);

if (in_array($ipaddress, $array)){
echo "in array";
}
else {echo "error";}

Вот как выглядит файл ip.txt (не имеет значения, что файл является «общедоступным»):

'IP1', 'IP2', 'IP3', 'IP4'

1

Решение

Вы сделали несколько вещей неправильно, но это должно работать для вас:

<?php

$ipAddress = $_SERVER['REMOTE_ADDR'];
$include = file_get_contents("ip.txt");$array = explode(",", str_replace("'", "", $include));

if (in_array($ipAddress, $array)) {
echo "in array";
} else {
echo "error";
}

?>

1. Вы должны использовать file_get_contents()потому что include сначала будет включать файл, поэтому этот простой текст находится в коде php, а во-вторых, он возвращает только true или же false! Для получения дополнительной информации см. Руководство: http://php.net/manual/en/function.include.php

И цитата оттуда:

Обработка возвратов: include возвращает FALSE в случае сбоя и выдает предупреждение. Успешное включение, если оно не переопределено включенным файлом, возвращает 1.

2. Вы должны взорвать строку из файла и удалить одинарные кавычки, чтобы получить IP-адреса в массиве.

3. PHP переменные чувствительны к регистру, поэтому $ipAddress а также $ipaddress 2 разные переменные! Для получения дополнительной информации см. Руководство: http://php.net/manual/en/language.variables.basics.php

А также цитата оттуда:

Имя переменной чувствительно к регистру.

0

Другие решения

include попытается запустить файл как программу PHP.

Вместо этого используйте file_get_contents():

$include = file_get_contents('ip.txt');
$array = explode(', ', $include);

if (in_array("'$ipaddress'", $array)){
echo "in array";
}

Так как IP-адреса окружены ', добавьте это к части иглы в in_array() также.

Проще было бы иметь IP-адреса каждый на одной строке. Тогда вы можете использовать file() который возвращает массив со строками файла.

0

По вопросам рекламы [email protected]