Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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在多行中获取字符串_Php_Mysql - Fatal编程技术网

如何使用php在多行中获取字符串

如何使用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_

我有一个类似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=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我只需要部分用户名和密码,其他什么都不要