如何使用php在多行中获取字符串
我有一个类似settings.txt的文件。 其中包含一些行,如如何使用php在多行中获取字符串,php,mysql,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_
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=desired username”bt我只想要“desired username”
现在我无法从中获取用户名和密码。
如何获取用户名和密码,以便在数据库中进行比较…
$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上的实时示例:
解释:
此代码将拆分由新行分隔符指定的文件内容,新行分隔符表示为\r\n
,这是新行的windows格式。。HTML等价物:
要查看完整阵列,请执行以下操作:
print_r($FileArr);
如果您只需要从文本文件获取数据,我建议使用csv,如下所示:
key,value
VERSION,3
BACKUP_DRIVE,D:\
BACKUP_DIRECTORY,BACKUP\
HOURLY_DIRECTORY,HOURLY\
INPUT_DIRECTORY,C:\MySQL\Data\CDR\
username,username
password,password
$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
});
然后,您可以这样做,将所有这些键和值放入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);
最好使用
file()
获取数据,这样返回的数据就已经在数组中(每行文本一个元素):
然后,也许可以运行数组遍历,将所有内容设置为可用数组
$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版本<5.3且不支持匿名函数的情况,您需要在此处使用命名函数,因此它可能如下所示:
key,value
VERSION,3
BACKUP_DRIVE,D:\
BACKUP_DIRECTORY,BACKUP\
HOURLY_DIRECTORY,HOURLY\
INPUT_DIRECTORY,C:\MySQL\Data\CDR\
username,username
password,password
$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_数组访问键/值
$username = $final_array['username'];
$password = $final_array['password'];
也就是说,以清晰的方式传递您的MySQL凭据(我假设就是这样)可能不是一个好主意。那么,您尝试从该文件中获取用户名和密码的实现是什么呢?您能否显示您的代码并准确解释出现问题的地方?我正在尝试分解函数$datasource\u array=explode(“\n”,$frserver);但不知道如何获取用户名和密码,Op声明他/她希望读取文本文件的内容,而不是将内容作为string@Daryl吉尔:
$frserver=文件获取内容(“http://ip 这里是/cdr/settings.txt“代码>?我甚至没有提到你以同样的方式阅读它:$File=File\u get\u contents(“Settings.txt”)代码>在你更新之前我就跳枪了,请忽略我的comment@zerkms也许你应该把它改成$frserver=file\u get\u contents(“http://ip 这里是/cdr/settings.txt“代码>..@HamZa-DzCyberDeV:。。。或者让他远程访问他的电脑,这样我们就可以为他做这项工作。为什么不;-)谢谢你的帮助,但亲爱的,我只想获取用户名而不是“set username=”juts用户名和密码。我尝试回显$username,但没有显示任何内容…应该是什么错误?你使用的是什么版本的PHP?您是否收到任何错误?错误日志中是否有错误?是否已打开错误报告功能?如果是,报告的错误级别是什么?$raw_array=file('is here/cdr/settings.txt')$final_数组=数组();array_walk($raw_array,function($value){$value=trim($value);//修剪换行符$value=str_replace('SET',''$value);//删除'SET'$value_array=explode('=',$value);//分解'='$final_array[$value_array[0]]=$value_array[1];//在$final_array}中设置键值)$用户名=$final_数组['username']$密码=$final_数组['password'];echo$username;echo$密码<代码>变量转储($raw\u数组)代码>并粘贴到某个地方是的..这已经完成亲爱的..bt我只需要部分用户名和密码,其他什么都不要