Showing posts with label php. Show all posts
Showing posts with label php. Show all posts

Monday, February 14, 2022

PHP: Warning: session_start(): open(..., O_RDWR) failed: Permission denied

在php 頁面中使用session_start()時,當session timeout後自動加載頁面,會因為之前的session 已結束,所以無法找到檔案。

可以嘗試在php.ini修改︰

session.save_path = 的參數

變更session的儲存位置應該就可以解決這個warning。

Tuesday, February 8, 2022

PHP Dictionary字典及Array矩陣操作

 由於PHP的字典及矩陣操作並不是太方便,經常忘記語法,所以在這邊總結一下︰


1. 下面這兩種都可以使用作為初始化

<?php

    $array=array(

        "foo"=>"bar",

        "bar"=>"foo"

        );

 

    $array=[          //自从PHP5.4以后。

        "foo"=>"bar",

        "bar"=>"foo",

    ];

?>


2. 改變值

$arr = array(5 => 1, 12 => 2);

$arr[] = 56;    //相当于增加了一个$arr[13] = 56;

$arr["x"] = 42; //增加一个新元素,键key=’x‘

unset($arr[5]); //删除数组中5=>1

unset($arr);    // 删除整个数组


3. 分拆explode() 等同python的split()

$str = 'one|two|three|four';

// 第三個參數是正数的 limit, 沒有的話就是全拆分

print_r(explode('|', $str, 2)); // 等於[0] => one, [1] => two|three|four


4. 合併inplode() 等同python的join()

$array = array('lastname', 'email', 'phone');

$comma_separated = implode(",", $array);  //等於 lastname,email,phone


上述內容參考︰https://www.cnblogs.com/coderchuanyu/p/3904711.html

字串格式化可用sprintf() 參考︰https://www.w3schools.com/php/func_string_sprintf.asp


Monday, December 30, 2019

PHP: send gmail

Main reference: https://pepipost.com/tutorials/send-an-email-via-gmail-smtp-server-using-php/

1. 先下載PHPMailer: https://github.com/PHPMailer/PHPMailer/archive/master.zip
2. 用composer install phpmailer/phpmailer
--> 遇到錯誤1



錯誤1:
E: Unable to locate package composer
分析: 未安裝composer

錯誤1解決:
sudo apt-get update
sudo apt-get install curl php5-cli git
curl -sS https://getcomposer.org/installer | sudo php -- --install- dir=/usr/local/bin --filename=composer

Monday, November 25, 2019

Thursday, August 8, 2019

PHP: connect to mysql

首先要確保以下幾點︰
1. apache有沒有允許連接到接口,可以查看host設置->Directory->Allow from all
2. 數據庫的用戶有沒有權限在第二個host登入,如果沒有權限可能會出︰
Caught exception: SQLSTATE[HY000] [2013] Lost connection to MySQL server at 'reading initial communication packet', system error: 0
如果真的有這個錯誤,請到用戶權限新增在這個host。
可參考這裏︰https://manage.accuwebhosting.com/knowledgebase/2200/How-to-Allow-Remote-Connection-to-MySQL-Server-in-Windows.html

Tuesday, August 6, 2019

PHP: send request to php, empty $_POST

在使用postman發送請求到PHP時,無法從php拿到$_POST的參數。
1. 檢查有沒有header: Content-Type: application/json
2. 使用下面語句,重置$_POST來源
$rest_json = file_get_contents("php://input");
$_POST = json_decode($rest_json, true);


Thursday, July 25, 2019

Tuesday, June 25, 2019

Error: PHP install with Pear

錯誤提示︰
Fatal error: Cannot use result of built-in function in write context in D:\xampp\php\pear\Archive\Tar.php on line 639

修正方案︰修改路徑中Tar.php 639行改為,
$v_att_list = func_get_args();

錯誤提示︰
Fatal error: Uncaught Error: Class 'Net_SMTP' not found in D:\xampp\php\pear\Mail\smtp.php:366
修正方案︰
安裝pear install Net_SMTP

Thursday, May 2, 2019

PHP: install composer

sudo apt update
sudo apt-get install php5-cli php5-curl php5-xmlrpc elinks
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
HASH=48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
ls /usr/local/bin/sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
composer

Reference: https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-ubuntu-18-04

Thursday, April 25, 2019

Wednesday, February 13, 2019

docker: nginx + php

下載docker images
docker pull nginx
docker pull bitnami/php-fpm

運行php-fpm和nginx,使用/var/www/html作為host的網頁目錄,不用進入docker進行修改
docker run -d -v /var/www/html:/usr/share/nginx/html --name php-fpm docker.io/bitnami/php-fpm
docker run -d --name nginx -p 8888:80 -v /var/www/html:/usr/share/nginx/html docker.io/nginx

檢查是否運行,以及IP位置
docker ps -a
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Option 1: 進入nginx修改網頁IP位置,不想在container裏面裝vi的話看下一步。
docker exec -it nginx /bin/bash
vi /etc/nginx/conf.d/default.conf

Option 2: 可以複製出來再修改
docker cp nginx:/etc/nginx/conf.d/default.conf ./
vi default.conf
修改後再放回去
docker cp ./default.conf  nginx:/etc/nginx/conf.d/default.conf

修改這幾項,填入上一步查詢到的IP,其他保留︰
service_name = [[NGINX_IP]];
location / {
   root  /usr/share/nginx/html;
   index  index.php index.html index.htm;
}
location ~ \.php$ {
   fastcgi_pass   [[PHP_FPM_IP]]:9000;
   fastcgi_index  index.php;
   fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
   fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
   include        fastcgi_params;
}

重啓nginx即可成功。
docker restart nginx

使用host的IP + 8888 port就可以訪問。
例如192.168.199.2:8888



中間筆記 不用理:

進入container
docker exec -it myNginx /bin/bash
離開
ctrl+p+q



docker run --restart=always --name mysql -v /etc/localtime:/etc/localtime:ro -p 3306:3306 -v /works/db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootroot -e MYSQL_DATABASE=test_project -e MYSQL_USER=project -e MYSQL_PASSWORD=12345678 -d mysql/mysql-server:5.5

docker run --restart=always --name php-fpm_5.2 -v /etc/localtime:/etc/localtime:ro -v /works/www:/works/www --link mysql:db -d helder/php-5.2

docker run --restart=always --name nginx -v /etc/localtime:/etc/localtime:ro -p 80:80 -e NGINX_SITE_ROOT=/works/www -v /works/www:/works/www -v /works/nginx/log:/var/log/nginx/ --link php-fpm_5.2:phpfpm -d nginx

Friday, November 9, 2018

Error: [0] BadFunctionCallException in Redis.php line 44 不支持: redis

在安裝thinkphp系統時,出現這個錯誤,原來是redis沒有放到php目錄下。


  1. 先在這裏下載php_redis.dll
  2. 然後解壓縮到php/ext/目錄中。
  3. 在php.ini加入extension=php_redis.dll
  4. 最後重啓apache就可以了。

自行配置PHP環境

Apache 2.4
https://www.apachehaus.com/cgi-bin/download.plx#APACHE24VC11
先修改apache/conf/httpd.conf裏面的ServerRoot和DocumentRoot。
用admin打開cmd,到達apache/bin目錄中,執行httpd.exe -k install進行安裝。
然後可以用httpd.exe -k start啓用,httpd.exe -k stop停止。
更多指令可以查看這裏

PHP 5.6
https://windows.php.net/download#php-5.6
解除ext-mysqli, ext-curl的註解。

MySQL 5.7
https://downloads.mysql.com/archives/installer/
直接看安裝教學。看缺少什麼包,上網找安裝檔。

Composer
https://getcomposer.org/download/
安裝後可以快速配置php模組。

phpMyAdmin
https://docs.phpmyadmin.net/en/latest/setup.html#installing-on-windows
用composer安裝。
在apache配置好vhost,運行路徑。
打開phpMyAdmin目錄,將config.sample.inc.php複製一份重新命名為config.inc.php。可以在裏面改MySQL的host。

Thursday, November 8, 2018

Error: The mysqli extension is missing. Please check your PHP configuration. See our documentation for more information.

在安裝phpMyAdmin後,打開browser時出現這個錯誤信息︰
The mysqli extension is missing. Please check your PHP configuration. See our documentation for more information.

網上找了一般時間都是說在C:/php/php.ini 解除php_mysqli.dll的注解。我照著做了也依舊出現這個問題,甚至重啓了也沒有作用。

於是在youtube找到了解決方案︰

  1. 進入到apache的bin目錄。
  2. 輸入mklink php.ini c:/php/php.ini,建立捷徑。
  3. 重新載入網頁。
這樣就解決了~

Friday, October 12, 2018

Laravel: 强制將頁面的主路徑改變

當網頁放上production時,預設asset, action, route等等都是從IP中找到文件。
例如http://127.0.0.1/pic/xxx.png

但是當網頁公開了以後,用戶就看不到這個圖片,因為用戶沒有辦法知道127.0.0.1在哪裡。
需要在Laravel做一些設定。

  1. 在目錄中有一個.env檔案,將裏面APP_URL改成想要訪問的根目錄︰http://domain.com/sys/
  2. 在config/app.php中更改APP_URL參數。
  3. 在routes/web.php的PHP程序加入『URL::forceRootUrl('http://domain.com/sys/');』
再重開服務器應該就可以了。

Saturday, June 30, 2018

PHP: internal server error 500

你看這個post只是提醒你...
PHP要在後面加分號!
PHP要在後面加分號!
PHP要在後面加分號!

lol

Thursday, August 3, 2017

PHP: 繁簡中文轉換

在PHP的服務器上可以配合opencc做繁簡的中文轉換。詳細安裝過程記錄可以參考這裡

Thursday, December 10, 2015

PHP - 連接Mssql

最近在做一個PHP網站連mssql的資料庫,PHP沒有預設安裝mssql的驅動,所以要通過Client ODBC做連接。

在Linux環璄中安裝了EasySoft的Client ODBC,但是按這個教程設定連接時出現以下錯誤︰

Fatal error: Call to undefined function odbc_connect()

然後在網上找了一個下午,看到了要在Linux裝一樣東西︰
sudo apt-get install php5-odbc

然後就成功用odbc_connect()連上mssql了~~
這個問題用了差不多兩天時間 = =

------------------------------兩天後--------------------------------

用了上面的解決方法後,因為解決不了中文的亂碼問題。
在PHP頁面是UTF-8,通過ODBC放入MS sql server後是亂碼,但再從linux取出時是中文。上網找了一下好像是MS sql server沒有UTF-8的編碼,只有BIG-5的。

我試過把所有charset轉做BIG-5還是不行...

最後是用Servlet再用PHP把資料傳過去,再放入DB才解決....太麻煩了。