layout: post
title: "php手機(jī)歸屬地查詢Demo"
date: 2016-05-18 22:37:17 +0800
comments: true
categories: [php]
看了視頻過后準(zhǔn)備自己擼一個(gè)PHP的手機(jī)歸屬地查詢秦叛。這個(gè)Demo的思路和方法其實(shí)算不上難幽钢。但是這個(gè)Demo作者使用了框架的思維并且用到了SPL等知識(shí)啥容。以前沒有寫過這樣的代碼廓旬,所以決定自己寫一次咖刃。
下面具體說說這個(gè)Demo中遇到的一些問題。
SPL-AutoLoad
在使用SPL的autoload時(shí)相赁,借助以前的Spl的代碼來實(shí)際使用饵蒂,發(fā)現(xiàn)在實(shí)際的項(xiàng)目中老是出現(xiàn)無法加載的情況。
先把具體代碼貼出來
<?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
{
}
如上,當(dāng)我將libs/mypdo.php
命名為MyPdo.php
時(shí)围苫,在實(shí)例化mypdo
就會(huì)發(fā)生不能加載的情況裤园,而如果命名成小寫就沒有問題。
原因如下:
<pre class="prettyprint linenums">
WINDOWS大小寫不敏感剂府,而在LINUX下區(qū)分大小寫拧揽,
spl_autoload會(huì)把類名轉(zhuǎn)化為小寫進(jìn)行文件搜索,
這樣就造成linux下無法正常include文件.
解決辦法:
1.索性把被包含文件改成小寫腺占;
2.掃目錄得到文件列表淤袜,然后遍歷列表去匹配出正確文件名,包含之衰伯。
</pre>
PHP內(nèi)存不夠
這個(gè)其實(shí)問題是出在對(duì)命名空間理解不透徹铡羡。
之前在使用PDO的時(shí)候?yàn)榱朔奖悖苯訉⒆远x的PDO操作類命名為PDO.php
并且在構(gòu)造函數(shù)中實(shí)例化PDO對(duì)象意鲸。
<?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();
}
}
}
?>
一直報(bào)錯(cuò)烦周,PHP每次不夠,改了很多次php.ini
都沒用临扮。后來突然發(fā)現(xiàn)是我在new PDO
的時(shí)候它實(shí)際上是new
的自己本身论矾,造成了一個(gè)死循環(huán)。
后來將類名改成mypdo
后發(fā)現(xiàn)找不到PDO杆勇。
原來是我這里用了命名空間的概念贪壳,如果想用PDO需要在前面加入
use \PDO;
```。
**MySQL刪除json_encode()出來的\**
在將數(shù)據(jù)保存到數(shù)據(jù)庫后蚜退,在讀數(shù)據(jù)時(shí)不能```json_decode```對(duì)應(yīng)的中文闰靴。
后來發(fā)現(xiàn)是在存入數(shù)據(jù)庫時(shí),中文編碼出來的```\```被刪除了钻注。
```php
{"a":"\u232e234\e23"}//json_encode的結(jié)果
{"a":"u232e234e23"}//存到數(shù)據(jù)庫的結(jié)果
解決方法:
在外層調(diào)用一下函數(shù)addslashes();這個(gè)函數(shù)會(huì)在每個(gè)反斜杠的前面添加反斜杠蚂且,如此這般就可以存進(jìn)數(shù)據(jù)庫了。
$info = addslashes(json_encode($review_log));//這樣處理后存進(jìn)數(shù)據(jù)庫就不回丟失“\"
最后我將這個(gè)Demo放到了GitHub:https://github.com/EwanReton/PhpPhoneLocation