php手机归属地查询Demo


layout: post
title: "php手机归属地查询Demo"
date: 2016-05-18 22:37:17 +0800
comments: true
categories: [php]


看了视频过后准备自己撸一个PHP的手机归属地查询。这个Demo的思路和方法其实算不上难。但是这个Demo作者使用了框架的思维并且用到了SPL等知识。以前没有写过这样的代码,所以决定自己写一次。

下面具体说说这个Demo中遇到的一些问题。

SPL-AutoLoad

在使用SPL的autoload时,借助以前的Spl的代码来实际使用,发现在实际的项目中老是出现无法加载的情况。
先把具体代码贴出来

<?php
    use app\MobileQuery;
    spl_autoload_extensions();
    set_include_path(get_include_path().PATH_SEPARATOR."libs/".PATH_SEPARATOR."app/");
    spl_autoload_register();
?>
<?php libs/mypdo.php
namespace libs;
use \PDO;
    class mypdo
    {
    }

如上,当我将libs/mypdo.php命名为MyPdo.php时,在实例化mypdo就会发生不能加载的情况,而如果命名成小写就没有问题。
原因如下:
<pre class="prettyprint linenums">
WINDOWS大小写不敏感,而在LINUX下区分大小写,
spl_autoload会把类名转化为小写进行文件搜索,
这样就造成linux下无法正常include文件.
解决办法:
1.索性把被包含文件改成小写;
2.扫目录得到文件列表,然后遍历列表去匹配出正确文件名,包含之。
</pre>

PHP内存不够

这个其实问题是出在对命名空间理解不透彻。

之前在使用PDO的时候为了方便,直接将自定义的PDO操作类命名为PDO.php并且在构造函数中实例化PDO对象。

<?php
namespace libs;
use \PDO;
    class PDO
    {
        public function __construct()
        {
            try {

                $this->db = new PDO("mysql:host=".$this->db_host.";dbname=".$this->db_name,$this->db_user,$this->db_pass);
                $this->db->exec("SET CHARACTER SET".$this->db_charset);
                $this->db->exec("SET NAMES".$this->db_charset);
            } catch (PDOException $e) {
                print "Error!:".$e->getMessage()."<br>";
                die();
            }

        }
    }
?>

一直报错,PHP每次不够,改了很多次php.ini都没用。后来突然发现是我在new PDO的时候它实际上是new的自己本身,造成了一个死循环。

后来将类名改成mypdo后发现找不到PDO。

原来是我这里用了命名空间的概念,如果想用PDO需要在前面加入

use \PDO;
```。

**MySQL删除json_encode()出来的\**

在将数据保存到数据库后,在读数据时不能```json_decode```对应的中文。

后来发现是在存入数据库时,中文编码出来的```\```被删除了。
```php
{"a":"\u232e234\e23"}//json_encode的结果
{"a":"u232e234e23"}//存到数据库的结果

解决方法:
在外层调用一下函数addslashes();这个函数会在每个反斜杠的前面添加反斜杠,如此这般就可以存进数据库了。

  $info = addslashes(json_encode($review_log));//这样处理后存进数据库就不回丢失“\"

最后我将这个Demo放到了GitHub:https://github.com/EwanReton/PhpPhoneLocation

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • PHP 学习目录 ├─PHP视频教程 1 LAMP网站构建 │ ├─PHP教程 1.1.1 新版视频形式介绍│ ...
    曹渊说创业阅读 16,266评论 29 417
  • 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和require方法,去把定义这...
    四月不见阅读 4,722评论 0 0
  • Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象...
    廖马儿阅读 6,738评论 2 38
  • 本文分为两部分:第一部分讲__autoload()函数实现的类自动加载。第二部分讲spl_autoload_reg...
    舒小贱阅读 7,359评论 1 4
  • 十月,认识你的第四年,第一次因为你而心动。很久没有喜欢一个人的悸动,小心翼翼地接触你,本以为是一场势均力敌的暗恋,...
    苦的优啦蜜阅读 1,625评论 0 0

友情链接更多精彩内容