PHP – 挨踢攻城獅學習之路 https://blog.cwlove.idv.tw 不太詳細紀錄 Thu, 15 Dec 2022 15:16:15 +0000 zh-TW hourly 1 PHP:Line Bot 開發 Server 問題紀錄 https://blog.cwlove.idv.tw/php-line-bot-notes/ https://blog.cwlove.idv.tw/php-line-bot-notes/#respond Fri, 03 Jun 2022 16:10:38 +0000 https://blog.cwlove.idv.tw/?p=2297
  • 問題:有沒教學或範本可以參考
  • 解決:佛心 Line Bot 開發教學,基礎範例程式碼 (PHP) – 輕量版 LINEBotTiny.php | 旋風之音 GoneTone (reh.tw)
    • 問題:本地測試都可以正常回應,上正式站 VPS 主機卻已讀不回,查看 PHP 沒噴 Error log
    • 解決:測試將 SELINUX 設為 0 後正常,爬文了下 LINEBotTiny.php 裡有使用 file_get_contents() 方法需要
    $ sudo setsebool -P httpd_can_network_connect on
    • 問題:存放設定檔及 assets 可被下載
    • 解決:調整 Nginx 設定後 reload
    location ~ \.(ini|env|conf)$ {
            deny all;
            return 404;
    }
    location /assets {
            deny all;
            return 404;
    }
    $ sudo nginx -s reload
    • 問題:連線資料庫顯示 Uncaught PDOException: could not find driver ,但程式碼沒毛病啊
    • 解決:調整 php.ini 把 pdo extension 打開
    extension=pdo_mysql
    • 問題:本地開發要怎麼讓 Webhook 連到本機?
    • 解決:使用 ngrok,下載後執行
    $ ngrok http 80
    
    Session Status                online
    Session Expires               1 hour, 59 minutes
    Update                        update available (version 3.0.4, Ctrl-U to update)
    Terms of Service              https://ngrok.com/tos
    Version                       3.0.3
    Region                        Japan (jp)
    Latency                       calculating...
    Web Interface                 http://127.0.0.1:4040
    Forwarding                    https://15c9-125-231-144-48.jp.ngrok.io -> http://localhost:80
    
    把 https 的連結貼到 Webhook URL 就可以了
    • 問題:如何同步到 Production 環境?
    • 解決:使用 VS Code 外掛 SFTP

    Ctrl + Shifp + P

    產生的 sftp.json 檔
    {
        "name": "App Server",
        "host": "域名",
        "protocol": "sftp",
        "port": 22,
        "username": "vps 主機帳號",
        "remotePath": "遠端目錄",
        "uploadOnSave": false, 
        "privateKeyPath": "D:\\私鑰位置", // Windows 每一層目錄都要兩個 \\ 喔
        "passphrase": "私鑰密碼",
        "watcher": {
            "files": "**/*",
            "autoUpload": true,
            "autoDelete": true
        },
        "ignore": [
            ".vscode",
            ".git",
            ".DS_Store",
            "README.md",
            "環境設定檔"
        ]
    }
    

    SFTP: Sync Local ➝ Remote 這樣就可以即時同步,測試結果啦

    如遇彈跳窗說明遠端目錄沒有權限話,可以修改遠端目錄權限,因為是 Nginx 使用者資料夾,所以用 setfacl 給予權限
    $ sudo setfacl -R -m user:帳號:rwx 目錄
    • 問題:Flex Message 怎麼寫?
    • 解決:除了上面佛心網友的教學,可以直接使用官方的 FLEX MESSAGE SIMULATOR 來製作,非常方便
    ]]>
    https://blog.cwlove.idv.tw/php-line-bot-notes/feed/ 0
    WordPress:PHP 7.4 + Opcache + Update Plugin = 502 Bad Gateway https://blog.cwlove.idv.tw/wordpress-php-74-opcache-502-bad-gateway/ https://blog.cwlove.idv.tw/wordpress-php-74-opcache-502-bad-gateway/#respond Sat, 11 Sep 2021 13:32:17 +0000 https://blog.cwlove.idv.tw/?p=2236 問題主要是 WordPress 使用 PHP 7.4 下,很容易在更新外掛後噴 502 Bad Gateway,網站錯誤畫面內容如下

    An error occurred.
    Sorry, the page you are looking for is currently unavailable.
    Please try again later.
    If you are the system administrator of this resource then you should check the error log for details.
    Faithfully yours, nginx.後來測試將 Opcache 關掉後就正常。

    後來將 Opcache 關掉就正常,便嘗試找哪一項設定問題。

    原本設定如下

    [opcache]
    opcache.enable=1
    opcache.enable_cli=1
    opcache.memory_consumption=64
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=10000
    opcache.validate_timestamps=1
    opcache.revalidate_freq=60
    opcache.save_comments=0
    opcache.file_cache=/tmp

    將最後一項 opcache.file_cache=/tmp 拿掉就正常了。

    對 PHP 及架構不熟,暫時先這樣處理。

    ]]>
    https://blog.cwlove.idv.tw/wordpress-php-74-opcache-502-bad-gateway/feed/ 0
    PHP:寄信跳錯SMTP connect() https://blog.cwlove.idv.tw/php-smtp-connect-failed/ https://blog.cwlove.idv.tw/php-smtp-connect-failed/#respond Tue, 23 Jul 2019 07:17:32 +0000 https://blog.cwlove.idv.tw/?p=1705
    架了不少開源相關服務都會用到PHP寄信功能,但經常會碰到如下錯誤
    Error in email sending: SMTP connect() failed.
    https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

    x 如果是用Gmail請設定:允許低安全性應用程式存取您的帳戶
    並參考Gmail SMTP設定
    帳號:[email protected]
    伺服器位址:smtp.gmail.com
    端口:587
    加密方式:TLS

    建議建一個帳號來發信,因為允許低安全將無法使用兩階段驗證
    通常Gmail SMTP第一次寄信會被阻擋,並收到信件通知
    【有人嘗試登入您已連結的 Google 帳戶,但遭到 Google 封鎖】
    這時進入他提供的連結,進入允許就可以了。

    2020.10.18 更新,不須允許低安全性應用程式存取您的帳戶。
    在兩階段驗證下,可以開啟應用程式密碼,黃框內的密碼複製貼上就可以了

    如用上述仍無解,且用其他信箱服務也確定帳密正確,可嘗試關閉SELINUX

    $sudo setenforce 0
    確認可以發信後,selinux改回來並輸入
    $sudo setsebool httpd_can_sendmail on 

    以上大概能解決PHP發信問題

    ]]>
    https://blog.cwlove.idv.tw/php-smtp-connect-failed/feed/ 0
    PHP:strftime()函數經過setlocale()後輸出亂碼問題 https://blog.cwlove.idv.tw/php-setlocale-utf8/ https://blog.cwlove.idv.tw/php-setlocale-utf8/#respond Mon, 07 Jan 2019 15:16:38 +0000 https://blog.cwlove.idv.tw/?p=901 strftime()函數經過setlocale()後,輸出亂碼如下圖

    一開始爬文找PHP亂碼,指向幾個解決方案
    1、php內加入 header(“Content-Type:text/html; charset=utf-8”);
    2、php.ini修改default_charset=”UTF-8″
    3、httpd.conf加入AddDefaultCharset utf-8
    但確認各項都是UTF-8了,想著還沒經過setlocale()前是正常
    最後將書本的範例由 setlocale(LC_ALL, ”); 改為 setlocale(LC_ALL, ‘zh_TW.UTF-8’); 即解決


    ]]>
    https://blog.cwlove.idv.tw/php-setlocale-utf8/feed/ 0
    VS Code:PHP executable not found. Install PHP 7 and add it to your PATH or set the php.executablePath setting https://blog.cwlove.idv.tw/vs-code-php-setting/ https://blog.cwlove.idv.tw/vs-code-php-setting/#respond Sun, 06 Jan 2019 04:17:48 +0000 https://blog.cwlove.idv.tw/?p=868 每次裝完VS Code 設定php.exe路徑都會忘了加 “php.validate.executablePath”: 導致怎麼試正反斜線都抓不到
    記錄一下,以免下次又忘。
    {
    “php.validate.executablePath”: “D:\\xampp\\php\\php.exe”,
    }

    ]]>
    https://blog.cwlove.idv.tw/vs-code-php-setting/feed/ 0
    PHP:網頁跳錯 Fatal error: Cannot re-assign auto-global variable _FILE https://blog.cwlove.idv.tw/php-error-global-variable/ https://blog.cwlove.idv.tw/php-error-global-variable/#respond Sat, 01 Dec 2018 15:03:43 +0000 https://blog.cwlove.idv.tw/?p=386 聽到前公司老PHP網站無法新增最新消息問題,雖對PHP還不熟,但當是學習所以自願幫忙。
    為判斷是哪兒出問題,所以先開啟PHP偵錯功能
    #vim /etc/php.ini
    找到display_errors off -> on 
    #systemctl restart httpd
    完成後,測試新增消息時,會跳出
    Fatal error: Cannot re-assign auto-global variable _FILE
    Google一下,大略是因為舊網站是PHP 5.4以前版本寫的,5.4後
    $_POST、$_GET、$_SESSION、$_SERVER、$_FILES 等這些都不能作為自定義變數了,而前公司正好將$_FILES寫在Function內作為參數。
    在修改$_FILES -> $FILES後可以正常新增最新消息了。
    但還碰到個問題,上傳的照片無法顯示!查看網站目錄,圖片確實沒上傳成功,再檢查了一下目錄權限
    原來是以前建apache server留下的爛尾,忘記改網站目錄及檔案擁有者
    #chown -R apache:apache /var/www/html
    解決,收工

    ]]>
    https://blog.cwlove.idv.tw/php-error-global-variable/feed/ 0