Tag Archive ว่างเปล่า

PHP: json_encode ไม่มีผลลัพธ์

เจอว่า json_encode มันไม่ return ผลลัพธ์ ออกมาเลยในหน้าเดียวกัน แต่ต่างกันที่ product id ลอง print_r / var_dump ตัว array ที่เข้าไปใน function ก็ปกติดี ไม่ได้มากมาย หรือมีเครื่องหมายพิเศษอะไร ลอง debug ดูถึงเจอว่าถ้าใช้ function json_last_error() มันจะ return เลข 7 กลับมาในหน้าที่มีปัญหา ลองค้นดูรหัส 7 คือ infinity number ลอง unset ตัว key ที่เป็น float(-INF) ดูก็กลับเป็นปกติจริงๆ

รหัสต่างๆ คือ

JSON error codes
Code Constant Meaning Availability
0 JSON_ERROR_NONE No error has occurred  
1 JSON_ERROR_DEPTH The maximum stack depth has been exceeded  
2 JSON_ERROR_STATE_MISMATCH Invalid or malformed JSON  
3 JSON_ERROR_CTRL_CHAR Control character error, possibly incorrectly encoded  
4 JSON_ERROR_SYNTAX Syntax error  
5 JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded PHP 5.3.3
6 JSON_ERROR_RECURSION One or more recursive references in the value to be encoded PHP 5.5.0
7 JSON_ERROR_INF_OR_NAN One or moreNANor INFvalues in the value to be encoded PHP 5.5.0
8 JSON_ERROR_UNSUPPORTED_TYPE A value of a type that cannot be encoded was given PHP 5.5.0
9 JSON_ERROR_INVALID_PROPERTY_NAME A property name that cannot be encoded was given PHP 7.0.0
10 JSON_ERROR_UTF16 Malformed UTF-16 characters, possibly incorrectly encoded PHP 7.0.0

[code language=”php” title=”php_json_encode.php”]
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<title>PHP: json_encode error</title>
<meta content="Pitt Phunsanit" name="author" />
</head>
<body>
<div class="container">
<?php
$datas = [
‘ininfity’ => -9e1000,
‘title’ => ‘title’,
];
?>
<div class="row"><label class="col-md-2" for="">Datas Arrya:</label><textarea class="col-md-10" cols="100" rows="6"><?=var_dump($datas); ?></textarea></div>
<div class="row"><label class="col-md-2" for="">Json Datas:</label><textarea class="col-md-10" cols="100" rows="6"><?=json_encode($datas); ?></textarea></div>
<div class="row">
<label class="col-md-2" for="">Json Error:</label>
<div class="col-md-10"><?=json_last_error(); ?></div>
</div>
<table class="table table-striped">
<caption><strong>JSON error codes</strong></caption>
<thead>
<tr>
<th>Code</th>
<th>Constant</th>
<th>Meaning</th>
<th>Availability</th>
</tr>
</thead>
<tbody class="tbody">
<tr>
<td><strong><code><?=JSON_ERROR_NONE; ?></code></strong></td>
<td><strong><code>JSON_ERROR_NONE</code></strong></td>
<td>No error has occurred</td>
<td class="empty">&nbsp;</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_DEPTH; ?></code></strong></td>
<td><strong><code>JSON_ERROR_DEPTH</code></strong></td>
<td>The maximum stack depth has been exceeded</td>
<td class="empty">&nbsp;</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_STATE_MISMATCH; ?></code></strong></td>
<td><strong><code>JSON_ERROR_STATE_MISMATCH</code></strong></td>
<td>Invalid or malformed JSON</td>
<td class="empty">&nbsp;</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_CTRL_CHAR; ?></code></strong></td>
<td><strong><code>JSON_ERROR_CTRL_CHAR</code></strong></td>
<td>Control character error, possibly incorrectly encoded</td>
<td class="empty">&nbsp;</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_SYNTAX; ?></code></strong></td>
<td><strong><code>JSON_ERROR_SYNTAX</code></strong></td>
<td>Syntax error</td>
<td class="empty">&nbsp;</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_UTF8; ?></code></strong></td>
<td><strong><code>JSON_ERROR_UTF8</code></strong></td>
<td>Malformed UTF-8 characters, possibly incorrectly encoded</td>
<td>PHP 5.3.3</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_RECURSION; ?></code></strong></td>
<td><strong><code>JSON_ERROR_RECURSION</code></strong></td>
<td>One or more recursive references in the value to be encoded</td>
<td>PHP 5.5.0</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_INF_OR_NAN; ?></code></strong></td>
<td><strong><code>JSON_ERROR_INF_OR_NAN</code></strong></td>
<td>
One or more
<a class="link" href="http://php.net/manual/de/language.types.float.php#language.types.float.nan" target="_blank"><strong><code>NAN</code></strong></a>
or <a class="link" href="http://php.net/manual/de/function.is-infinite.php" target="_blank"><strong><code>INF</code></strong></a>
values in the value to be encoded
</td>
<td>PHP 5.5.0</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_UNSUPPORTED_TYPE; ?></code></strong></td>
<td><strong><code>JSON_ERROR_UNSUPPORTED_TYPE</code></strong></td>
<td>A value of a type that cannot be encoded was given</td>
<td>PHP 5.5.0</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_INVALID_PROPERTY_NAME; ?></code></strong></td>
<td><strong><code>JSON_ERROR_INVALID_PROPERTY_NAME</code></strong></td>
<td>A property name that cannot be encoded was given</td>
<td>PHP 7.0.0</td>
</tr>
<tr>
<td><strong><code><?=JSON_ERROR_UTF16; ?></code></strong></td>
<td><strong><code>JSON_ERROR_UTF16</code></strong></td>
<td>Malformed UTF-16 characters, possibly incorrectly encoded</td>
<td>PHP 7.0.0</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>[/code]

git: ให้สร้างโพลเดอร์แต่ไม่สนไฟล์ข้างใน

จากเรื่อง default file รูปด้วย .htaccess ตัว directory \datas\peoples\ ต้องการที่จะให้ git push folder นี้และไฟล์ .htaccess และ default.jpg ขึ้นไปด้วย แต่ไม่ต้องการไฟล์อื่นๆ ใน \datas\peoples\ โพลเดอร์นี้ไปด้วย

ทำได้โดย

  1. ตรวจให้แน่ใจว่าไดเร็กทอรี่ ไม่อยู่ใน ไฟล์ .gitignore อื่นๆ ที่อยู่ใน directory แม่ เช่น \.gitignore และ \datas\.gitignore
  2. สร้างไฟล์ \datas\.gitignore โดยมีเนื้อหา[code language=”text”]
    # Ignore everything in this directory
    *
    # Except this file
    !.gitignore

    !/peoples/
    !/peoples/.htaccess
    !/peoples/default.jpg
    [/code] อธิบายง่ายๆคือ

    • * แทนละเว้นทุกไฟล์ใน folder \datas
    • ยกเว้น file ที่มีเครื่องหมาย ! นำหน้าชื่อ เช่น !.gitignore คือ ให้สนใจไฟล์ .gitignore ที่ใส่คำสั่งนี้ด้วย (ถ้าไม่ใส่ ไฟล์นี้จะถูกไม่สนใจ รวมถึงคำสั่งที่เขียนไว้ด้วย
    • !/peoples/ สร้างโพลเดอร์ /peoples/ เปล่าๆ ในโพลเดอร์ \datas\
    • !/peoples/.htaccess และ !/peoples/default.jpg คือให้เก็บ 2 ไฟล์นี้ไปด้วย
  3. add, push และ commit

หลังจากนี้ ทุกครั้งที่ pull ลงมาก็จะสร้างทั้ง 2 ไฟล์ทุกครั้ง