การบีบอัดแบบไบนารี

Webman รองรับการบีบอัดโปรเจคให้เป็นไฟล์ไบนารี ซึ่งทำให้ Webman สามารถทำงานบนระบบลีนุกซ์ได้โดยไม่ต้องใช้สภาพแวดล้อม PHP

หมายเหตุ
ไฟล์ที่ถูกบีบอัดแล้วในขณะนี้รองรับการทำงานเฉพาะบนระบบลีนุกซ์ที่มีสถาปัตยกรรม x86_64 เท่านั้น ไม่รองรับในระบบ Windows และ Mac
ต้องปิดตัวเลือกการกำหนดค่าของ phar ใน php.ini ด้วยการตั้งค่า phar.readonly = 0

การติดตั้งเครื่องมือบรรทัดคำสั่ง

composer require webman/console

การบีบอัด

เรียกใช้คำสั่ง

php webman build:bin

สามารถระบุเวอร์ชัน PHP ที่ต้องการบีบอัดได้ เช่น

php webman build:bin 8.1

หลังจากบีบอัดแล้ว จะมีไฟล์ webman.bin ในไดเรกทอรี bulid

การเริ่มต้น

อัปโหลด webman.bin ไปยังเซิร์ฟเวอร์ลีนุกซ์ และเรียกใช้ ./webman.bin start หรือ ./webman.bin start -d เพื่อเริ่มต้น

หลักการ

  • ก่อนอื่นจะบีบอัดโปรเจค Webman ในเครื่องท้องถิ่นเป็นไฟล์ phar
  • จากนั้นดาวน์โหลด php8.x.micro.sfx ไปยังเครื่อง
  • นำ php8.x.micro.sfx และไฟล์ phar มาต่อรวมเป็นไฟล์ไบนารี

ข้อควรระวัง

  • แนะนำอย่างยิ่งให้เวอร์ชัน PHP ในเครื่องท้องถิ่นและเวอร์ชันที่ใช้ในการบีบอัดเหมือนกัน เช่น ถ้า PHP ในเครื่องท้องถิ่นคือ 8.1 ควรใช้ PHP เวอร์ชัน 8.1 ในการบีบอัด เพื่อหลีกเลี่ยงปัญหาความเข้ากันได้
  • การบีบอัดจะดาวน์โหลดซอร์สโค้ดของ PHP8 แต่จะไม่ติดตั้งในเครื่อง จึงไม่ส่งผลกระทบต่อสภาพแวดล้อม PHP ในเครื่อง
  • webman.bin ในขณะนี้รองรับการทำงานเฉพาะบนระบบลีนุกซ์ที่มีสถาปัตยกรรม x86_64 เท่านั้น ไม่รองรับการทำงานในระบบ Mac
  • โปรเจคที่ถูกบีบอัดไม่รองรับการโหลดใหม่ (reload) ต้องรีสตาร์ทเพื่ออัปเดตโค้ด
  • โดยค่าเริ่มต้นจะไม่บีบอัดไฟล์ env (ควบคุมโดย exclude_files ใน config/plugin/webman/console/app.php) ดังนั้นไฟล์ env ควรวางอยู่ในไดเรกทอรีเดียวกันกับ webman.bin ในระหว่างการเริ่มต้น
  • ในระหว่างการทำงานจะสร้างไดเรกทอรี runtime ในไดเรกทอรีที่ webman.bin ตั้งอยู่ เพื่อเก็บไฟล์บันทึก
  • ในขณะนี้ webman.bin จะไม่อ่านไฟล์ php.ini จากภายนอก ถ้าต้องการกำหนดค่า php.ini เอง ให้ตั้งค่าในไฟล์ /config/plugin/webman/console/app.php ในฟิลด์ custom_ini
  • บางไฟล์ที่ไม่จำเป็นต้องบีบอัด สามารถตั้งค่าให้ exclude ใน config/plugin/webman/console/app.php เพื่อลดขนาดของไฟล์ที่ถูกบีบอัด
  • การบีบอัดแบบไบนารีไม่รองรับการใช้ swoole coroutine
  • ห้ามจัดเก็บไฟล์ที่ผู้ใช้อัปโหลดในแพ็คเกจไบนารี เพราะการดำเนินการไฟล์ที่ผู้ใช้อัปโหลดด้วยโปรโตคอล phar:// นั้นเป็นอันตรายมาก (ช่องโหว่การทำลาย phar) ไฟล์ที่ผู้ใช้อัปโหลดต้องถูกจัดเก็บแยกต่างหากในดิสก์ภายนอก
  • หากธุรกิจของคุณต้องการอัปโหลดไฟล์ไปยังไดเรกทอรี public ต้องแยกไดเรกทอรี public ออกจากกันและวางไว้ในไดเรกทอรีเดียวกันกับ webman.bin ในกรณีนี้ต้องกำหนดค่า config/app.php ดังนี้และทำการบีบอัดใหม่
    'public_path' => base_path(false) . DIRECTORY_SEPARATOR . 'public',

ดาวน์โหลด PHP แบบสแตติกแยกต่างหาก

บางครั้งคุณอาจไม่ต้องการติดตั้งสภาพแวดล้อม PHP เพียงแค่ต้องการไฟล์ PHP ที่สามารถเรียกใช้ได้ คลิกที่นี่เพื่อดาวน์โหลด PHP แบบสแตติก

คำแนะนำ
หากต้องการกำหนดไฟล์ php.ini ให้กับ PHP แบบสแตติก โปรดใช้คำสั่งต่อไปนี้ php -c /your/path/php.ini start.php start -d

ส่วนขยายที่รองรับ

Core, date, libxml, openssl, pcre, sqlite3, zlib, amqp, apcu, bcmath, calendar, ctype, curl, dba, dom, sockets, event, hash, fileinfo, filter, gd, gettext, json, iconv, SPL, session, standard, mbstring, igbinary, imagick, exif, mongodb, msgpack, mysqlnd, mysqli, pcntl, PDO, pdo_mysql, pdo_pgsql, pdo_sqlite, pdo_sqlsrv, pgsql, Phar, posix, readline, redis, Reflection, shmop, SimpleXML, soap, sodium, sqlsrv, sysvmsg, sysvsem, sysvshm, tokenizer, xlswriter, xml, xmlreader, xmlwriter, xsl, zip, memcache, Zend OPcache

แหล่งที่มาของโปรเจค

https://github.com/crazywhalecc/static-php-cli
https://github.com/walkor/static-php-cli