我正在编写一些代码,这些代码在文本文件中搜索特定的字符串,然后返回该行中的其余字符。
例如,在文本文件中将...
2011年4月字符串1和字符串2
我希望代码搜索“string 1”,识别“&”,并返回后面的所有内容,即“string 2”。然后需要在一个curl数组中发送。
这就是我到目前为止所拥有的...在其他问题的帮助下...
$eventid = "string1";
$count = 1;
$handle = fopen("https://www.example.com/output.txt", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
$pos = strpos($line, $eventid);
if ($pos !== false) {
$text= substr($line, strpos($line, "&") + 1);
echo $text;
break;
}
$count++;
}
fclose($handle);
} else {
// error opening the file.
}
这似乎是我想要的,并在$text中返回“string 2”。但是当我将$text输入到curl数组中并执行时,我在响应中得到一个错误,说“JSON格式无效”。
下面是curl代码的一个片段。
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{ "string": "'.$text.'"}',
我会很感激你的帮助谢谢
编辑:
因此,当我最初将这两个字符串存储在txt文件中时,在命令的末尾有一个PHP_EOL命令,这样下一个条目将在新的一行中。我认为该命令在string 2的末尾添加了一个隐藏的值,当我将其输入到curl数组中时,它不喜欢它。所以我改变了在文本文件中存储字符串的方式,在命令的开头加上PHP_EOL,后面跟着字符串。curl不再有错误。
编辑2:以下是误解的评论...
这就是output.txt文件的生成方式。
$filename = 'output.txt';
$date = date("d/m-H:i : ");
$eventid = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz'),1,16);
file_put_contents($filename, array(PHP_EOL, $date, 'eventid=', $eventid, '&', $string), FILE_APPEND);
以下是内容的示例...
05/11-03:40 : afgwhdkp4srzvbtc&E.C.P.CssBOR39QXh2Q3Vd8AETrNGSMgczh17L88msrC6FsmykSZFR7XzxbIpFnPuAQdBPbdmShKa6b3bhbSo4gqECUW5W5Y6OoPLQlRA-uvxMTkRblKK4Yb0TM66DHChJALsAQ0fDWeqSKB7XrehW3D52GXtjXxQuWhp5KpKQuf1m3JhI7gp5Rl_t7BabNNMeHLR9ecVJ7lHwZxEoyv9xIzJgXw0-Vi4KCWtwH0JDxxVrlxynyEu830fub4R3gy94wvkm2YLKdPSmsil3NVzUuD4SBHYyLjAaIJYLgslxEyzjLZlf7J4vcu-1zJguCrQp0Iq7JZ_qmRZT
05/11-06:10 : mnztrselg9iv0xao&E.C.P.CssBQ1X9Uz4m6lkvYSQgd4wK95nmwl44LjQ8IhDzthInNbQzSaWsRmB-A-ieyYuixUnEnanc3HMGDyKKHUZi3gf-QAjXk4XtBxgrXB46bOWQ3iPnXjFX4Z2MjB8isA5ID6IcmsCXIay34d74yV72N5Z6LOzXCxJH2vRhpyJfywUiO9Amg-HiieL7oQwVm3igFFE3uVV75qw8GQgueyKHqaiiOlPmYvNAnIL2McGMq_pTYVJC-aPj8jyPw8DdRDzmQpJOthysPqz5rr9ZYd0SBHYyLjAaIO_BO5uaIHfqvWXxDLkK_Alxn6o33Ck-SSquyGuMczwg
格式为“日期-时间:eventid&string”每个条目都有一个新行。但是我还没有指定代码要查找的“/n”。
'误解' -在您下面的代码中,$str返回string 1,然后返回文件的其余内容。我假设是因为我没有在output.txt中的每一行都以“/n”结尾。
1条答案
按热度按时间vfhzx4xs1#
更新
格式为“日期-时间:eventid&string”每个条目都有一个新行。但是我还没有指定代码要查找的“/n”。
在我的Linux服务器上,
PHP_EOL
是\n
有时当我为Windows生成一个文件时,我用
"\r\n"
终止一行。我从不使用
PHP_EOL
。您可以将
\n
替换为PHP_EOL
。我生成了一个如下所示的测试event.txt(以
\n
结尾的行):我的测试文件(event.txt):
在生成JSON字符串时,我从一个数组开始,并将其转换为
json_encode()
我的代码:
输出量:
我在文件中添加了一个trim(),并删除了[“string”,false]:
我还用
PHP_EOL
替换了\n
,得到了相同的结果。更新结束
您的代码(或我)可能做出了一些不正确的假设。
每个参数后面是否有新行?
你的代码是这么认为的。
如果你能发布一个
output.txt
的例子或片段,那将是一个很大的帮助。让我们试试这个:
请注意,第一个
strpos()
没有第三个参数。其中第二个(
$end=
)有第三个参数。如果你有任何问题,尽管问,因为我不知道你的专业水平。
现在我需要知道我们正在解析的这个查询字符串后面是什么。假设它是一个查询字符串。
了解字符串被解析后的内容非常重要。
我可能更容易提取整个查询字符串并在“&”上展开它。
如果查询字符串以换行符终止:
若要解决当前错误,请添加此选项:
然后
curl_exec()
之后......