如何使用php在行之间获取字符串

时间:2013-04-08 21:31:44

标签: php mysql

我有一个像settings.txt这样的文件。 其中包含一些像

这样的行
SET VERSION=3
SET BACKUP_DRIVE=D:\
SET BACKUP_DIRECTORY=BACKUP\
SET HOURLY_DIRECTORY=HOURLY\
SET INPUT_DIRECTORY=C:\MySQL\Data\CDR\
SET username=username
SET password=password

此文件位于其他位置或其他服务器上。我使用...

获取此文件
$frserver =  file_get_contents("http://ip is here/cdr/settings.txt");

我用过这个

$File = file_get_contents("http://ip is heresettings.txt");
$FileArr = explode("\r\n",$File);
echo $FileArr[5]; // This will output: SET username=desired username

并获取" SET username =所需用户名" bt我只想要"所需的用户名" ..这个问题留下了nw

现在我无法从中获取用户名和密码。 如何获取用户名和密码,以便我可以在db ...中进行比较...

4 个答案:

答案 0 :(得分:2)

假设

$frserver = 'SET VERSION=3
SET BACKUP_DRIVE=D:\
SET BACKUP_DIRECTORY=BACKUP\
SET HOURLY_DIRECTORY=HOURLY\
SET INPUT_DIRECTORY=C:\MySQL\Data\CDR\
SET username=username
SET password=password';

整个解决方案就是这两行:

preg_match_all('~^SET\s+([^=]+)=(.*)$~m', $frserver, $matches);
$params = array_combine($matches[1], $matches[2]);

之后,您可以相应地将变量检索为$params['username']$params['password']

ideone上的实例:http://ideone.com/pn2Wbp

答案 1 :(得分:0)

$File = file_get_contents("Settings.txt");
$FileArr = explode("\r\n",$File);
echo $FileArr[5]; // This will output: SET username=username

说明:

此代码将分解由\r\n表示的新换行符指定的文件内容,这是新行的窗口格式。等效的HTML格式:<br>

查看完整数组:

print_r($FileArr);

答案 2 :(得分:0)

如果您只需要从文本文件中获取数据,我建议使用csv,如下所示:

key,value
VERSION,3
BACKUP_DRIVE,D:\
BACKUP_DIRECTORY,BACKUP\
HOURLY_DIRECTORY,HOURLY\
INPUT_DIRECTORY,C:\MySQL\Data\CDR\
username,username
password,password

然后你可以做这样的事情来将所有这些键和值放到PHP数组中:

$contents = file_get_contents('http://ip is here/cdr/settings.txt');
$lines = explode("\n",$contents);
foreach($lines as $line) {
   $pair = str_getcsv($line);
   $settings[] = array($pair[0]=>$pair[1]);
}
// print_r to see the array
print_r($settings);

答案 3 :(得分:0)

最好使用file()来获取数据,这样返回的数据就已经在数组中了(每行文本一个元素):

$raw_array = file('http://ip is here/cdr/settings.txt');

然后可能运行数组遍历将所有内容设置为可用的数组

$final_array = array();
array_walk($raw_array, function($value) use $final_array {
    $value = trim($value); // trim newlines
    $value = str_replace('SET ', '', $value); // remove 'SET '
    $value_array = explode('=', $value); // break up value on '='
    $final_array[$value_array[0]] = $value_array[1]; // set key/value in $final_array
});

对于PHP版本&lt; 5.3如果不支持匿名函数,则需要在此处使用命名函数,因此它可能如下所示:

$final_array = array();
array_walk($raw_array, 'parse_raw_array', $final_array);

function parse_raw_array ($value, $key_not_used, $final_array) {
    $value = trim($value); // trim newlines
    $value = str_replace('SET ', '', $value); // remove 'SET '
    $value_array = explode('=', $value); // break up value on '='
    $final_array[$value_array[0]] = $value_array[1]; // set key/value in $final_array
});

然后只需根据需要从$ final_array访问键/值

$username = $final_array['username'];
$password = $final_array['password'];

话虽这么说,传递你的MySQL凭据(我认为这就是这个),这样做可能不是一个好主意。