php诡异问题,折腾了一晚上了,内置函数不工作!!!

Hauk 2017-01-29 10:34:28


$dsnStr = "mysql://root:password@127.0.0.1:8040/mypro_db";

$info = parse_url($dsnStr);
var_dump($info); //返回false

preg_match('/^(.*?)\:\/\/(.*?)\:(.*?)\@(.*?)\:([0-9]{1, 6})\/(.*?)$/',trim($dsnStr),$matches);
var_dump($matches); //返回空数组



parse_url、preg_match
在其他机器上这两个函数都能正确返回数据啊,为什么在我新装的一台却不行?
目前就发现这两个函数不正常,请问是什么原因呢?
...全文
229 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hauk 2017-01-31
  • 打赏
  • 举报
回复
谢谢大家热心解答,我主要是纠结parse_url为什么不工作,因为我项目使用的是Thinkphp框架,上面那段代码是框架源码,用来解析mysql数据库链接字符串。 现在问题已经解决了。 是因为我的数据库密码中有个#号,在php5.6中parse_url就出问题了,php5.5却可以工作。我修改一下密码就好了。
傲雪星枫 2017-01-30
  • 打赏
  • 举报
回复
改这样就好了

<?php

$dsnStr = "mysql://root:password@127.0.0.1:8040/mypro_db";

$info = parse_url($dsnStr);
var_dump($info);           //返回false

preg_match('/^(.*?)\:\/\/(.*?)\:(.*?)\@(.*?)\:([0-9]{1,6})\/(.*?)$/',trim($dsnStr),$matches);
var_dump($matches); //返回空数组
?>

array (size=6)
  'scheme' => string 'mysql' (length=5)
  'host' => string '127.0.0.1' (length=9)
  'port' => int 8040
  'user' => string 'root' (length=4)
  'pass' => string 'password' (length=8)
  'path' => string '/mypro_db' (length=9)
array (size=7)
  0 => string 'mysql://root:password@127.0.0.1:8040/mypro_db' (length=45)
  1 => string 'mysql' (length=5)
  2 => string 'root' (length=4)
  3 => string 'password' (length=8)
  4 => string '127.0.0.1' (length=9)
  5 => string '8040' (length=4)
  6 => string 'mypro_db' (length=8)
不是什么诡异问题,是你写错了正则,这里你多了一个空格导致,删除就可以了。 preg_match('/^(.*?)\:\/\/(.*?)\:(.*?)\@(.*?)\:([0-9]{1,空格6})\/(.*?)$/',trim($dsnStr),$matches);
xuzuning 2017-01-30
  • 打赏
  • 举报
回复
正则表达式规则串写错了,自然是空数组

20,397

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧