Tag Archive version

Linux: upgrade PHP version ล่าสุด

php ก็เหมือนโปรแกรมอื่น ๆ จะมีการอัพเดต อัพเกรดเวอร์ชั่นเป็นระยะเพื่อเพิ่มความสามารถและความปลอดภัย การอัพเดตใน linux และ wsl สามารถทำได้ง่าย ๆ

  1. Update ระบบโดยรวมก่อน

    sudo apt update && sudo apt -y upgrade
  2. เพิ่ม Surý PHP APT repository

    sudo apt update

    sudo apt install -y lsb-release gnupg2 ca-certificates apt-transport-https software-properties-common

    sudo add-apt-repository ppa:ondrej/php
  3. ติดตั้ง PHP ตัวล่าสุด

    sudo apt install php8.2
  4. เช็ค php version โดย

    php -v
  5. ติดตั้ง extension เพิ่มเติม เช่น

    sudo apt-get install -y libapache2-mod-php8.2 libphp8.2-embed mcrypt openssl php-bcmath php-cli php-common php-curl php-fpm php-gd php-gmp php-intl php-mbstring php-mysql php-tokenizer php-xml php-xmlrpc php-zip php8.2 php8.2-bcmath php8.2-cgi php8.2-cli php8.2-common php8.2-curl php8.2-dev php8.2-fpm php8.2-gd php8.2-imagick php8.2-imap php8.2-mbstring php8.2-mysql php8.2-phpdbg php8.2-soap php8.2-xml php8.2-xmlrpc php8.2-zip
  6. ผูก Apache และ PHP

    sudo apt install apache2 php-fpm

ดูเพิ่มเติม How To Install PHP 8.2 on Ubuntu 22.04|20.04|18.04

C#: Error CS0579 Duplicate ‘System.Reflection.AssemblyCompanyAttribute’

เขียน c# อยู่ๆเจอ error Error CS0579 จริงๆ ไม่ใช่อยู่ๆ หรอก ทุกอย่างมันมีเหตุปัจจัยมันถึงแจ้ง error มาให้ดู โดยที่เจอคือ

  • Error CS0579 Duplicate ‘System.Reflection.AssemblyConfigurationAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyConfigurationAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyFileVersionAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyProductAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyTitleAttribute’
  • Error CS0579 Duplicate ‘System.Reflection.AssemblyVersionAttribute’

ดูโดยรวมแล้วมันคือไฟล์ที่บันทึกเวอร์ชั่นของโปรเจคที่เราได้เขียนเอาไว้ สาเหตุก็น่าจะง่ายๆ ไปแก้ไขมันแล้วพังนั่นเอง แต่ไม่น่าพังนะ ก็ไปแก้ตามวิธีปกติเองนี่น่า ไปไล่ๆ ดูจนพบวิธีแก้ คือ

  1. ไปที่โฟลเดอร์ของ project ที่มีปัญหา
  2. ค้นหาไฟล์ *.Assemblyinfo.cs
  3. จะเห็นว่ามันมีไฟล์ตัวนี้อยู่ 5 ตัวเลย ลบทิ้งทั้งหมด
  4. ลอง clearn แล้ว run project ดูใหม่ ถ้ายัง error ไปบรรทัดที่มันเตือนอยู่แล้วลบทิ้งไปเลย

Cr. Duplicate AssemblyVersion Attribute

c#: build .exe with version

ต้องเก็บไฟล์ที่ build ไฟล์เป็น version ต่างๆ ให้ user เอาไว้เทส ถ้านานๆ ทำทียังพอจะเปลี่ยนชื่อให้ได้ แต่ถ้าทำบ่อยๆ คงจะน่าเบื่อ ให้คอมทำให้ซิ

เปิดไฟล์ *.csproj ใน folder ของ project ออกมาแก้ ปกติก็ใส่ไว้ท้าย ๆ ไฟล์

  <Target Name="GetAssmeblyVersion" AfterTargets="Build">
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
      <Output TaskParameter="Assemblies" ItemName="MyAssemblyIdentities" />
    </GetAssemblyIdentity>
    <Message Text="Assmebly Version: %(MyAssemblyIdentities.Version)" />
  </Target>
  <Target Name="PostBuild" AfterTargets="GetAssmeblyVersion">
    <Exec Command="copy /Y "$(ProjectDir)$(OutDir)\$(TargetName).exe" "$(ProjectDir)$(OutDir)\$(TargetName) v.%(MyAssemblyIdentities.Version)_$(ConfigurationName).exe"

" />
  </Target>

</Project>

หลังจาก build code ชุดนี้จะทำตามคำสังใน PostBuild ในที่นี้คือใช้ command copy .exe ตามปกติแล้วเพิ่ม version เข้าไปให้

ขอขอบคุณ

C#: แสดง program version

โปรแกรมถ้าหากมีแก้ไขกันหลายๆ ครั้ง ก็ควรจะแสดงให้เห็นได้ง่าย ๆ ว่า user ใช้ version ไหนอยู่ จะได้ง่ายในการดูแล

การใส่ version ใน .Net จะเรียกว่า set assembly ทำได้ง่าย ๆ โดย

  1. ไปที่ Solution Explorer (ขวามือ)
  2. คลิกขวาตรง Project File (ใต้คำว่า Solution) เลือก Properties
  3. กรอกข้อมูล Assembly Name
  4. คลิก Assembly Information…
  5. ใส่เลข Assembly version: และข้อมูลอื่น ๆ

จากนั้นแก้ form ที่ต้องการให้แสดงเวอร์ชั่น โดยแทรก

AssemblyName thisAssemName = this.GetType().Assembly.GetName();
this.Text = thisAssemName.Name + " Version " + thisAssemName.Version;

เช่น FormMain.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PrototypeCSharp
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();

            AssemblyName thisAssemName = this.GetType().Assembly.GetName();

            this.Text = thisAssemName.Name + " Version " + thisAssemName.Version;

        }
    }
}

เพิ่มเติม ถ้าต้องการแสดง environment ที่โปรแกรมกำลังใช้อยู่อาจจะเพิ่ม configurations ตามวิธี C#: Configurations ก็อาจจะแก้เป็น

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PrototypeCSharp
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();

            AssemblyName thisAssemName = this.GetType().Assembly.GetName();

            if (Configurations.environment == "PRODUCTION")
            {
                this.Text = thisAssemName.Name + " Version " + thisAssemName.Version;
            }
            else
            {
                this.Text = thisAssemName.Name + " Version " + thisAssemName.Version + " " + Configurations.environment;
            }
        }
    }
}

อ่านเพิ่มเติม

การติดตั้ง PHP หลายเวอร์ชั่น บน IIS

การติดตั้ง PHP หลายๆ เวอร์ชั่นบน IIS หรือการติดตั้ง UAT และ production server อยู่ในเครื่องเดียวกัน สามารถทำได้โดยใช้ Handler Mappings

การตั้งค่า Handler Mappings

  1. เปิดโปรแกรม Internet Information Services (IIS) Manager
  2. คลิกที่ site ที่ต้องการ, folder ที่จะให้สามารถ run PHP ได้ หรือที่ชื่อ server ถ้าต้องการให้ ทุก site สามารถ run PHP ได้
  3. คลิก Handler Mappings
    Request path:
    *.php
    Module:
    FastCgiModule ถ้าไม่มีให้เลือก GGI เพิ่มในตัวเลือกการติดตั้ง IIS หรืออ่าน note ในหน้า Using FastCGI to Host PHP Applications on IIS 7
    Executable:
    ใส่ path ชี้ไปที่ php-cgi.exe เช่น C:\Program Files\PHP\v7.2\php-cgi.exe อย่าลืมเปลี่ยนช่องด้านหลังจาก *.dll เป็น *.exe ด้วย
    Name:
    เช่น PHP_via_FastCGI 7.2
  4. คลิก OK
  5. ตอบ Yes
  6. (ไม่จำเป็น) คลิกที่ site หรือ server แล้ว restart
  7. Test

docker: image tag version

การสร้าง docker container วิธีต่างๆ จะเห็นคำว่า tag อยู่ในทุกคำสั่ง เช่น

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

ที่เวลาใช้จะพิมย์ เป็น

docker pull php:7.1.10-fpm

ตอนแรกผมเข้าใจว่ามันคือ keyword ไว้อธิบายว่า container ตัวนี้มันคืออะไร ทำมาจากอะไร แต่จริงๆแล้ว มันไม่ใช่ keyword ที่ไว้ค้นหา แต่ก็ไม่ได้ผิดไปนัก

การอ้างถึง image จะประกอบด้วย 2 ส่วนคือ image:version

image
image คือต้นแบบโปรแกรมที่เราใช้ เหมือนไฟล์ .iso ที่เป็นไฟล์ที่จำลองแผ่น cd / dvd ตอนเราติดตั้งโปรแกรม เราไม่ได้ใช้ไฟล์ .iso ทำงานต่างๆให้เรา image ก็เช่นกันไว้ติดตั้ง apache, mysql แต่ไม่ได้ทำงานแทนโปรแกรมพวกนั้นเป็นแค่ ต้นฉบับไว้ให้จำลองเป็น container
tag หรือ version
เป็นตัวบอกว่า ให้ติดตั้ง image version ที่เท่าไหร่ เช่น php 5.6.31 ถ้าไม่ระบุเวอร์ชั่น docker จะเลือกตัวล่าสุดหรือ :latest ให้โดยอัตโนมัติ

เราสามารถค้นหา image ได้จาก Docker Hub

บาง image จะมีหลาย repository ให้เลือกใช้ (แนวคิดเดียวกับ distro ของ linux เลย)

  • ตัวที่เป็นทางการหรือ official repository หรือ library จะมี link แบบ https://hub.docker.com/_/php/ ใช้โดยเขียน php หรือ php: ตามด้วย tag (version) ได้เลย
  • ส่วนตัวอื่นจะมี ชื่อผู้ผลิตนำหน้า เช่น https://hub.docker.com/r/appsvc/php/ เวลาใช้ก็ต้องอ้าง appsvc/php: ตามด้วย tag (version)

บาง image ยังมีหลาย version ให้เลือกอีก เช่น 7.1.10-alpine, 7.1.10-apache, 7.1.10-cli, 7.1.10-fpm ให้เลือกอีก

ถ้าเราไม่ใส่ :tag จะหมายถึง tag :latest หรือ ใหม่ที่สุดเท่าที่จะมีใน image ตัวนั้นๆ