พีเอชพี (PHP) 7
northwind | Traing49 | Training492 | PHP5 | HTML | Responsive | Web2 | Kahoot | PHP7 | Assignment
Run PHP Online
ในอดีต ถ้าเขียนโปรแกรมแล้วต้องการทดสอบประมวลผล ก็ต้องติดตั้ง Webserver ที่บริการภาษา PHP หรือลงโปรแกรมประเภท XAMPP แต่ปัจจุบัน สะดวกขึ้น ผู้เรียน หรือนักพัฒนาสามารถเขียนโปรแกรมบน Smartphone แล้วทดสอบได้เลย เพียงลงโปรแกรม Palapa web server หรือง่ายกว่านั้น ก็โดยเข้าเว็บไซต์ 1) phptester.net 2) onlinephpfunctions.com 3) writephponline.com 4) phpfiddle.org แล้วทดสอบเขียน code และ execute ได้เลย ได้นำ code ใน ต.ย.25 ไปทดสอบผ่านบริการ Online ทั้ง 4 Website และปรับปรุง code ให้ใช้งานได้ทั้งบน PHP 7.0 และ 5.6
keyword & reserved word PHP Keywords [php.net]
__halt_compiler() abstract and array() as break callable (as of PHP 5.4) case catch class clone const continue declare default die() do echo else elseif empty() enddeclare endfor endforeach endif endswitch endwhile eval() exit() extends final finally (as of PHP 5.5) for foreach function global goto (as of PHP 5.3) if implements include include_once instanceof insteadof (as of PHP 5.4) interface isset() list() namespace (as of PHP 5.3) new or print private protected public require require_once return static switch throw trait (as of PHP 5.4) try unset() use var while xor yield (as of PHP 5.5) yield from (as of PHP 7.0)
Reserved words [php.net]
int (as of PHP 7) float (as of PHP 7) bool (as of PHP 7) string (as of PHP 7) true (as of PHP 7) false (as of PHP 7) null (as of PHP 7) void (as of PHP 7.1) iterable (as of PHP 7.1) object (as of PHP 7.2)
php 5 deprecated
https://www.php.net/manual/en/migration70.deprecated.php
https://www.php.net/manual/en/migration53.deprecated.php
Deprecated functions:
call_user_method() (use call_user_func() instead)
call_user_method_array() (use call_user_func_array() instead)
define_syslog_variables()
dl()
ereg() (use preg_match() instead)
ereg_replace() (use preg_replace() instead)
eregi() (use preg_match() with the 'i' modifier instead)
eregi_replace() (use preg_replace() with the 'i' modifier instead) *
mcrypt_generic_end()
set_magic_quotes_runtime() and its alias, magic_quotes_runtime()
session_register() (use the $_SESSION superglobal instead)
session_unregister() (use the $_SESSION superglobal instead)
session_is_registered() (use the $_SESSION superglobal instead)
set_socket_blocking() (use stream_set_blocking() instead)
split() (use preg_split() instead) *
spliti() (use preg_split() with the 'i' modifier instead)
sql_regcase()
mysql_db_query() (use mysql_select_db() and mysql_query() instead)
mysql_escape_string() (use mysql_real_escape_string() instead)
Passing locale category names as strings is now deprecated. Use the LC_* family of constants instead.
The is_dst parameter to mktime(). Use the new timezone handling functions instead.
split และ preg_split
if(phpversion('tidy') > 7) {
$r = preg_split("/:/","a:b:c");
echo count($r);
} else {
$r = split(":","a:b:c");
echo count($r);
}
// WARNING preg_split(): No ending delimiter ':' found on line number xxx
// $a = preg_split("[$b]",$c);
// $d = preg_split("[\)]","(a)b");
// $e = preg_split("[ทดสอบ]","เพียงทดสอบเอง");
// article.php
คลาส object ใน moodle 1.9
<?php
// class object {}
// $a = new object();
class obj {}
$x = new obj;
$x->id = 123;
echo $x->id; // 123
$y = new stdclass;
$y->id = 456;
echo $y->id; // 456
$z = new stdclass();
$z->id = 789;
$z->name = "tom";
echo $z->id; // 789
foreach ($z as $v) {
echo $v . '<br/>';
}
// 789 tom
?>
<script>
var o = new Object();
o.id = 5;
document.write(o.id);
</script>

https://github.com/conel/
thaiall.com/e-learning/
6 กุมภาพันธ์ 2563 ปลุก อภิธานศัพท์ (Glossary) ซึ่งเป็นโมดูลใน Moodle 1.9 (stable) บน Thaiall.com ที่ใช้ php 7.3 และ mysql 5.0 ได้สำเร็จ จึงเล่าสั้น ๆ ไว้ใน /blog ซึ่งปัญหาที่ใช้เวลางมงายอยู่พักหนึ่ง คือ script ของ Moodle 1.9 นั้น พัฒนาให้ใช้งานได้บน php5 แต่ใช้ไม่ได้บน php7 โดยเฉพาะพบการสร้าง class ชื่อ object ที่ extends คุณสมบัติของ stdclass มาใช้ พบในบรรทัดที่ 10 บนแฟ้ม lib/setuplib.php หากเปลี่ยนจาก object เป็น obj แต่ก็จะพบปัญหาใหม่อีกจำนวนมาก ที่มี code เรียกใช้คลาส object แต่ใน php 7.2 กำหนดให้ object เป็น reserved word ทำให้ทุกครั้งที่สั่ง new object จะ error เพราะ object ถือว่า deprecated ไปแล้ว ดังนั้น Moodle 1.9 จึงใช้งานบน php 7 ไม่ได้ หากไม่ได้รับการแก้ไขเรื่อง object
วิธีแก้ไข เรื่อง object คือ สั่ง replace ในแฟ้ม .php ทั้งหมด แทนที่คำว่า "= new object" เป็น "= new stdclass" แต่มีปัญหาเล็กน้อยที่ต้องระวัง คือ = new Object() มีการใช้งานใน javascript ซึ่งมีรูปแบบเหมือนกับที่ใช้ใน Moodle 1.9 แต่ไม่มีคลาสชื่อ stdclass ใน Javascript จึงสลับกันไม่ได้บน Javascript ดังนั้น การแทนที่ Object ด้วย stdclass ก็จะทำให้ Javascript ไม่สามารถทำงานได้ แต่การแทนที่ new object ด้วย new stdclass จะทำให้ทำงานได้ทั้งบน Moodle 1.9 และรุ่นที่สูงกว่า เช่น รุ่น 3.8.1 (ก.พ.2563)
อีก 2 ปัญหาที่พบใน mod/glossary คือ มีการใช้ eregi_replace ที่ต้องใช้ preg_replace แทน เนื่องจาก deprecated ไปแล้ว และพบหลายฟังก์ชันมีการประกาศให้รับตัวแปร จำนวนตัวแปรไม่ตรงกับตอนเรียกใช้ฟังก์ชัน ทำให้เกิด Internal Server Error ก็ต้องตามแก้ไขให้ตอนส่ง และตอนรับตรงกัน
split() เป็น preg_split()
จำนวน Arguments ที่รับ และส่งไม่เท่ากันใน Moodle 1.9
function y(&$id){ ++$id; } // pass by reference
function z($id){ ++$id; } // pass by value
$id=1;
y($id); echo $id; // 2
z($id); echo $id; // 2
y($id); echo $id; // 3
z($id); echo $id; // 3
// Turn off error reporting
// error_reporting(0); // E_ALL
function x($a,$b,$c=0){ return true; }
echo x(5,6,7); // php5 : ok
echo x(5,6); // php5/php7 : ok
try {
   echo x(5); // Warning || Fatal error
//} catch (Exception $e) {
} catch (Error $e) {
   //echo $e->getMessage();
}
// php5 - Warning: Missing argument 2 
// php7 - Fatal error: Uncaught ArgumentCountError: Too few arguments to function x(), 1 passed
// function &get_fast_modinfo(&$course, $userid=0) {
//
$course=1; $cm=1; $glossary=1; $entry=1; $mode='1'; $hook='1'; $displayformat=1; $ratings =1;
function glossary_print_entry($course, $cm, $glossary, $entry, $mode='',$hook='',$printicons = 1, $displayformat  = -1, $ratings = NULL, $printview = false) { }
glossary_print_entry($course, $cm, $glossary, $entry, "", "", 0); // mod/glossary/lib.php
glossary_print_entry($course, $cm, $glossary, $entry, $mode, $hook,1,$displayformat,false,true); // mod/glossary/print.php
glossary_print_entry($course, $cm, $glossary, $entry, $mode, $hook,1,$displayformat,$ratings) // mod/glossary/view.php
พบ code ใน Moodle 1.9 สร้างฟังก์ชัน get_fast_modinfo ใน course/lib.php บรรทัดที่ 1058 ว่า function &get_fast_modinfo(&$course, $userid=0) { แล้วใช้ & เพื่อกำหนดการ pass by reference ใน argument และในแฟ้มเดียวกันนี้ก็พบการเรียกใช้บรรทัดที่ 880
ด้วย $modinfo =& get_fast_modinfo($course); สำหรับการใช้ =& คือ การสั่งอ้างอิง ไม่ใช่การคัดลอกค่า เช่น
$a = 1; $b =& $a;
$a = 2;
echo $a . $b; // 22
นอกจากนั้น ยังพบฟังก์ชัน glossary_print_entry ใน mod/glossary/lib.php ที่รอรับตัวแปร 10 ตัว คือ $course, $cm, $glossary, $entry, $mode='', $hook='', $printicons = 1, $displayformat = -1, $ratings = NULL, $printview = false แต่แฟ้มเดียวกันเรียกใช้ กลับส่งตัวแปรเพียง 7 ตัว
คือ glossary_print_entry($course, $cm, $glossary, $entry, "", "", 0);
ส่วน mod/glossary/print.php ส่งตัวแปรมา 10 ตัว
ส่วน mod/glossary/view.php ส่งตัวแปรมา 9 ตัว
https://github.com/moodle/moodle
D:\git>git pull moodle-1.9 master
remote: Enumerating objects: 154, done.
remote: Counting objects: 100% (154/154), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 20945 (delta 125), reused 119 (delta 119), pack-reused 20791
Receiving objects: 100% (20945/20945), 275.39 MiB | 1.70 MiB/s, done.
Resolving deltas: 100% (4492/4492), done.
From https://github.com/conel/moodle-1.9
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> moodle-1.9/master
Checking out files: 100% (24111/24111), done.
D:\git>
Write in Editor and Run

Download : editplus
การเขียน Webpage บน Editplus หากต้องการให้เขียนแล้ว และดูผลการแก้ไข Script ในทันที ก็สามารถ Config ให้ทำได้ เพราะ Editor สนับสนุนการสร้างเครื่องมือ เพื่อสั่ง Compile แล้ว Run สำหรับการพัฒนาโปรแกรมแบบผ่าน Compiler อยู่แล้ว ส่วน Script ที่ต้อง Run บน Web Server อย่างภาษา PHP หากต้องการใช้ Tool มีสิ่งที่ต้องทำ ดังนี้
1) เปิดบริการ Web Server ถ้าใช้ XAMPP ก็สะดวกเลย กรณีของผมลงไว้ และมีห้อง c:\xampp\htdocs สำหรับเก็บ script หากเป็น Web Server ของ IIS หรือ Appserv ก็หา Folder ให้พบ ก็จะเข้าไปจัดการได้เหมือนกัน
2) ถ้าต้องการย้าย DocumentRoot ไปชี้ห้องอื่น ก็เปิด ControlPanel ของ XAMPP คลิ๊ก Config เลือก Apache (httpd.conf) มองหา DocumentRoot "C:/xampp/htdocs" และ <Directory "C:/xampp/htdocs"> แล้วเปลี่ยนเป็นชื่อ Folder ที่ต้องการเก็บ Script สำหรับ run ได้เลย
3) เปิด Editplus คลิ๊ก Menu bar, Tools, Configure User Tools.. แล้ว Add Tool, Program กรอกข้อมูล 3 ช่อง คือ Menu Text, Program และ Argument ช่อง Menu Text ตั้งชื่อตามถนัด ช่อง Program เลือกที่ตั้ง เช่น C:\Program Files (x86)\Google\Chrome\Application\chrome.exe ช่อง Argument นี้กรอกว่า http://localhost/$(FileName)
4) เราพึ่งสร้าง Tool ตัวแรกสำหรับใช้งาน สั่งด้วยการกด Ctrl+1 ขณะเขียนโปรแกรมจะ Save อัตโนมัติ แล้วไปเปิด Browser พร้อมเรียก Script มาประมวลผลให้เห็นทันใด เทคนิคการสร้าง Tool แบบนี้ ทำให้นึกถึงการเขียนโปรแกรม Turbo C, Cobol, Assembly ที่เป็น Compiler ต้องมีขั้นตอนการ Compile และ Run แยกกัน
default_charset

illegal character : 41 char
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 219 220 221 222 252 253 254 255
30 ม.ค.63
ค่าปริยายเซตของตัวอักษร (Character Set) สามารถกำหนดในแฟ้ม php.ini ด้วย default_charset = "UTF-8" มีผลให้เว็บเพจใน server จะแสดงผลแบบ UTF-8 ทำให้ผู้พัฒนาต้องกำหนดการ encoding ของ code ที่เขียนด้วยภาษา php เป็น UTF-8 และข้อมูลที่อ่านมาแสดงผล ต้องปรับให้เป็น UTF8
หากอ่านข้อมูล Text มาเป็น TIS-620 ต้องแปลงด้วย echo iconv('TIS-620','UTF-8',$data); พบว่า มีบางตัวอักษร เช่น ตัวอักษร hex93(147) และ hex94(148) ซึ่งเป็น “ เปิดและ ” ปิด ที่แสดง Notice : error ขณะใช้ iconv แก้ไขโดยใช้ echo iconv('TIS-620','UTF-8//ignore',$data); ก่อนใช้ iconv สามารถตรวจสอบได้ว่ามีการกำหนด default_charset ไว้เป็นอะไรด้วยคำสั่ง if(ini_get('default_charset') == "UTF-8") { }
for($i=0;$i<256;$i++)
if(strlen(iconv('TIS-620','UTF-8//ignore',chr($i))) == 0) {
  echo $i ;
}
// Notice: iconv(): Detected an illegal character in input string in C:\x.php on line 3

กรณีศึกษา การนำเสนอสารสนเทศ
1. ที่ทำงานต้องการส่งออก excel ไปแสดงในเว็บไซต์ ให้บุคลากรเข้าถึงแบบ อินทราเน็ต ยืนยันด้วยรหัสบุคลากร ผลลัพธ์จำแนกตามหน่วยงาน ตามคน และมีชาร์ตวิเคราะห์ผล
2. เตรียมข้อมูลใน excel ในแบบที่หน่วยงานถนัด แล้ว save as เป็น Text (Tab limited) แฟ้มที่ได้เข้ารหัสภาษาแบบ TIS-620 ถูกเตรียมให้ใช้งานบนเว็บไซต์
3. ในเครื่องบริการ ที่กำหนด charset เริ่มต้นเป็น UTF-8 ทำให้แฟ้มข้อมูล .txt และแฟ้มโปรแกรม .php ต้องเป็น UTF-8
4. อ่านข้อมูลมาแสดงทันทีไม่ได้ แสดงผลผิดเพี้ยนไป เพราะชุดอักษรต่างกัน จึงใช้ iconv เปลี่ยนรูปแบบ หากใช้แล้วมีปัญหา ให้เติม //ignore หลังคำว่า UTF-8
5. มีตัวอักษรที่แปลงด้วย iconv ไม่ได้จำนวน 41 ตัว เช่น double quote ตัวที่ 147 และ 148 เมื่อใช้ //ignore ก็ทำให้มองข้ามไปได้
Memcache ติดตั้ง memcache เพื่อใช้ใน wordpress บน nginx ใน google cloud
มีโจทย์จากเพื่อนเรื่องการติดตั้ง memcache บน nginx ซึ่งเคยมีความเชื่อว่าจะติดตั้งบน nginx ไม่ได้จาก manual ในหลายที่ แต่เมื่อได้อ่านที่ nginxtips.com ซึ่งพบว่า memcache นั้นเกี่ยวกับ php ไม่ได้เกี่ยวกับ nginx จึงเข้าไปแก้ไข php.ini ลบ ; หน้าบรรทัด extension=memcache.so แล้วใช้ service bitnami restart ก็พบว่า memcache ปรากฎใน phpinfo(); แต่ก่อนหน้านี้ต้องติดตั้ง memcache ให้เรียบร้อยก่อน ในเครื่องของ google cloud ที่ใช้อยู่มี php 5.4.4 ซึ่งไม่ได้ติดตั้ง memcache ไว้ ต้องหามาติดตั้งเอง และใช้ ps -aux | grep memache ตรวจสอบว่าทำงานอยู่หรือไม่ จากนั้นก็เชื่อมเข้า php ผ่าน php.ini
#vi /opt/bitnami/php/etc/php.ini
เดิม ;extension=memcache.so
ใหม่ extension=memcache.so
Google chart

การนำเสนอ chart ในเว็บเพจ มีด้วยกันหลายวิธี ได้ทบทวนการใช้ OFC (Open Flash Chart) อยู่พักหนึ่ง สุดท้ายก็ต้องยอมแพ้ เพราะ เส้นทางของ Flash ในอนาคต ดูจะตีบตันเหลือเกิน และ OFC ก็ไม่ได้พัฒนาต่อให้สมบูรณ์ ต่างกับ Google Chart ที่พัฒนาอย่างต่อเนื่อง และเลือกใช้งานได้หลากหลาย ตามความต้องการของผู้ใช้

<html><head><title>line chart</title>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
  var data = google.visualization.arrayToDataTable([
  ['Year', 'Sales', 'Expenses'],
  ['2004', 1000, 400],
  ['2005', 1170, 460],
  ['2006', 660, 1120],
  ['2007', 1030, 540]]);
  var options = { title: 'Company Performance', curveType: 'function', legend: { position: 'bottom' }
};
var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
chart.draw(data, options);
}
</script></head>
<body><div id="curve_chart" style="width: 900px; height: 500px"></div></body>
</html>
Source + Output : .. line.docx
D3.js เป็น JavaScript library สำหรับ Powerful Vistualization

ต.ย. Adjustable Link Strength

ต.ย. ใน bl.ocks.org
เว็บไซต์ที่เกี่ยวข้อง
+ D3 Gallery in github
+ D3 Gallery in mbostock
+ Adjustable_link_strength
พี่หมู - ดร.กฤษฎิ์ วงศ์ศุภสวัสดิ์ บรรยายเรื่อง Big data กับการประชาสัมพันธ์ และในนาทีที่ 48.20 พูดถึง D3.js สำหรับ Web developer ใช้เพื่อนำเสนอข้อมูลได้หลายมุมมอง สรุปแล้ว D3.js คือ JavaScript library สำหรับจัดการนำเสนอเอกสารจากข้อมูล ช่วยให้ข้อมูลดูมีชีวิตโดยใช้ HTML, SVG, and CSS ซึ่ง D3 เน้นนำเสนอบน Web ผ่าน Browser แบบ Visualization โดยไม่ต้องพิมพ์รายงานเอง ตามแนวคิดแบบ data-driven approach
ต.ย. เขียนสามวงกลม d3_3circle.htm (ทำงานได้บน xampp)
<html><head><title>d3_3circle.htm</title></head>
<body><script src="https://d3js.org/d3.v5.min.js"></script>
<svg width="720" height="120" style="background-color:yellow">
  <circle cx="40" cy="60" r="10"></circle>
  <circle cx="80" cy="60" r="10"></circle>
  <circle cx="120" cy="60" r="10"></circle>
</svg>
<svg width="360" height="60"  style="background-color:gray">
  <circle cx="40" cy="30" r="5" style="fill:steelblue;"></circle>
  <circle cx="80" cy="30" r="5" style="fill:red;"></circle>
  <circle cx="120" cy="30" r="5"></circle>
</svg>
</body></html>
upload multi-files
อัพโหลดหลายไฟล์ผ่าน click เดียว
22 ม.ค.54 การ upload แฟ้มเข้าเครื่องบริการทีละแฟ้มนั้น ใช้คำสั่งไม่เกิน 5 บรรทัดก็สามารถทำได้ แต่ถ้าต้องการ upload หลายแฟ้มด้วยการ click ครั้งเดียว ต้องเขียนหลายบรรทัด .. การศึกษาเรื่องนี้เกิดจาก คุณแบงค์ (เพื่อนร่วมงาน) ถามว่า ทำอย่างไร upload หลายแฟ้มเข้าเครื่องบริการผ่าน web browser .. ผมเองก็เคยเห็นใน hi5.com หรือ facebook.com เมื่อหลายปีก่อน เมื่อสืบค้นดูก็พบว่า swfupload.org มี code จึงนำมาดัดแปลง และเปิดให้ทดสอบที่ http://www.thaiall.com/php/multiupload
+ http://demo.swfupload.org/v250beta3/
+ http://www.thaiall.com/download/multiupload_swfupload.zip
+ ถ้านำไปใช้ อย่าลืมอ่าน readme.txt ใน .zip .. ก่อนนะครับ
code ช่วยตรวจสอบ
// กรณีไม่ตรวจสอบ ด้วรการเปิด error.log หรือต้องการตรวจสอบแบบ manual
// http://localhost/x.php?x=100
// start script
session_start();
if(isset($_GET["x"])) $_SESSION["chkx"] = $_GET["x"];
// next script
$chkx = 100;
if(isset($_SESSION["chkx"]) && $_SESSION["chkx"] == $chkx++) { echo $_SERVER["SCRIPT_NAME"] . __LINE__; exit; }
$a = preg_split("[,]","a,b,c");
if(isset($_SESSION["chkx"]) && $_SESSION["chkx"] == $chkx++) { echo $_SERVER["SCRIPT_NAME"] . __LINE__; exit; }
$b = split(",","a,b,c"); // error in php7 
// PHP Fatal error: Uncaught Error: Call to undefined function split()
// c:\xampp\apache\logs\error.log
if(isset($_SESSION["chkx"]) && $_SESSION["chkx"] == $chkx++) { echo $_SERVER["SCRIPT_NAME"] . __LINE__; exit; }
Parsedown
การติดตั้ง Composer และ Parsedown
https://github.com/erusev/parsedown
https://getcomposer.org/Composer-Setup.exe
https://github.com/erusev/parsedown/blob/master/Parsedown.php
1. กำหนดให้้ห้องที่ติดตั้ง c:\composer
2. กำหนดห้องเก็บ php.exe เช่น c:\xampp71\php\php.exe
C:\Users\[user]\AppData\Roaming\Composer\vendor\bin
3. restart เพื่อให้การตั้งค่าให้ระบบใหม่
4. DOS> composer -v
5. DOS> cd c:\xampp\htdocs
6. DOS> composer require erusev/parsedown
Using version ^1.7 for erusev/parsedown
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing erusev/parsedown (1.7.4): Downloading (100%)
Writing lock file
Generating autoload files
7.  พบใน c:\xampp\htdocs
composer.json
composer.lock
/vendor
/vendor/autoload.php
/vendor/composer มี 8 แฟ้ม
/vendor/erusev
/vendor/erusev/parsedown/ มี 4 แฟ้ม
8. test1.php
<?php
require_once 'vendor/erusev/parsedown/parsedown.php';
$parsedown = new Parsedown();
$text = file_get_contents('test1.md');
echo $parsedown->text($text);
// echo $parsedown->line($text); ไม่มีการจัดรูปแบบแยก paragraph
9. localhost/test1.php
composer คืออะไร Composer คือ เครื่องมือจัดการแพกเกจ หรือไลบรารี่ (Composer Library Mangement) ของภาษาพีเอชพี (PHP Framework) ช่วยให้ค้นหา จัดการ และติดตั้งแพกเกจ หรือไลบรารี่ได้อย่างเป็นระเบียบง่ายขึ้น ซึ่งเดิมจะต้องค้นหา (Search) ดาวน์โหลด (Download) แตกซิปไฟล์ทีละแฟ้ม (Unzip) และปรับคอนฟิก (Config) แต่ใช้ composer -h หรือ composer list หรือ composer search blog หรือ composer install ตามที่กำหนดใน composer.json ได้เลย
การติดตั้ง composer บน linux
ใช้ $curl -sS https://getcomposer.org/installer | php
การประมวลผลใช้ $php composer.phar หรือ composer.phar
แนะนำให้ $cp composer.phar /usr/local/bin/composer เพื่อให้ทุกคนเรียกใช้ได้ง่าย
การติดตั้ง composer บน windows
ติดตั้ง php หรือ xampp และต้องรู้ว่า php.exe อยู่ใน folder ใด
ติดตั้ง https://getcomposer.org/Composer-Setup.exe
และต้องระบุตำแหน่งของ php.exe ที่จะใช้งานระหว่างติดตั้ง composer
การติดตั้งโปรแกรมผ่าน composer
composer -V
php -v
cd c:\xampp\htdocs\
สร้างแฟ้ม composer.json
{
"require": {
"monolog/monolog": ">=1"
}
}
composer install
- Installing psr/log (1.1.2): Loading from cache
- Installing monolog/monolog (1.25.3): Loading from cache
รายการแฟ้มหลังใช้คำสั่ง composer install
- composer.json
- composer.lock ถูกสร้างหลังติดตั้ง
/vender
- autoload.php
- /composer
- /monolog
- /psr
https://github.com/Seldaek/monolog
ทดสอบ x.php ใน htdocs
http://zetcode.com/php/monolog/
<?php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('mytest.log', Logger::WARNING));
// add records to the log
$log->warning('Foo');
$log->error('Bar');
c:\xampp\htdocs\mytest.log
[2020-03-03 15:10:32] name.WARNING: Foo [] []
[2020-03-03 15:10:32] name.ERROR: Bar [] []
การติดตั้ง Wordpress และ Monolog ผ่าน Composer การติดตั้ง Wordpress
cd c:\xampp7\htdocs
สร้างแฟ้ม composer.json
{
"require": {
"monolog/monolog": ">=1",
"johnpbloch/wordpress-core": "^5.0"
}
}
composer install
- Installing psr/log (1.1.2): Downloading (100%)
- Installing monolog/monolog (2.0.2): Downloading (100%)
- Installing johnpbloch/wordpress-core (5.3.2): Downloading (100%)
พบใน c:\xampp7\htdocs
- composer.json
- composer.lock
พบใน c:\xampp7\htdocs\vendor
- autoload.php
- /composer/* - 8 Files
- /johnpbloch/wordpress-core/* (wp-admin, wp-content, wp-includes, *) - 1,931 Files, 207 Folders
- /monolog/* - 115 Files, 11 Folders
- /psr/* - 14 Files, 4 Folders
<?php
// http://localhost/test.php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('vendor/mytest.log', Logger::WARNING));
// add records to the log
$log->warning('Foo');
$log->error('Bar');
c:\xampp7\htdocs\vendor\mytest.log
[2020-03-04T03:00:12.294461+01:00] name.WARNING: Foo [] []
[2020-03-04T03:00:12.312745+01:00] name.ERROR: Bar [] []
[2020-03-04T03:01:14.024284+01:00] name.WARNING: Foo [] []
[2020-03-04T03:01:14.028780+01:00] name.ERROR: Bar [] []
http://localhost/vendor/johnpbloch/wordpress-core/wp-admin/setup-config.php
http://localhost/vendor/johnpbloch/wordpress-core/
การติดตั้ง Composer
https://i-makeweb.com/development/composer-php-library-management
https://nextflow.in.th/2017/install-php-composer-windows-thai/
https://spalinux.com/2015/01/install-composer-to-manage-php-library
https://getcomposer.org/doc/03-cli.md
https://getcomposer.org/doc/01-basic-usage.md
http://www.thaiall.com/laravel/index.html
droidedit + md5
composer wordpress