標籤
BAT
(38)
shell
(34)
Virtual Machine
(33)
Xubuntu
(29)
acfs
(25)
PHP
(24)
CentOS
(21)
Virtul Box
(20)
編輯器
(17)
資料庫
(15)
lubuntu
(13)
windows
(13)
CPP
(12)
ubuntu
(12)
chrome
(11)
laravel
(10)
Docker
(9)
Python
(9)
5A88
(7)
VMware
(6)
資料結構
(6)
Javascript
(5)
Node
(5)
Proxmox VE
(5)
公告系統
(5)
程式積木
(5)
Android Studio
(4)
ANN
(3)
OB2D2016x64
(3)
Xoops
(3)
clonezilla
(3)
samba
(3)
公文
(3)
其他
(3)
硬體
(3)
API
(2)
Android
(2)
AppInvent2
(2)
Html
(2)
Hyper-V
(2)
Nas
(2)
botnet
(2)
mbot
(2)
swift
(2)
wordpress
(2)
樣板
(2)
防火牆
(2)
AD的應用
(1)
Ansible
(1)
Arduino
(1)
CSS
(1)
GitLab
(1)
HA Proxy
(1)
LegoEV3
(1)
PowerShell
(1)
Scratch
(1)
VM
(1)
XenServer
(1)
kotlin
(1)
linuxmint
(1)
lxc
(1)
2021年2月18日 星期四
2021年1月24日 星期日
2021年1月19日 星期二
2020年12月27日 星期日
2020年12月3日 星期四
2020年11月5日 星期四
2020年11月4日 星期三
紀明村老師的運動檢錄系統程式碼研究心得(一)介接CloudSchool與mysql資料庫
現在研究紀老師的運動檢錄系統程式碼,心中湧起幾個問題。希望能藉由原始碼解決心中的疑惑。由於紀老師使用Sqlite,但內容也有mysql pdo的語法。因此,希望能改寫成mysql的語法。
1.安裝mysql
$sudo apt-get install mysql-server -y
$sudo apt-get install mysql-client -y
$sudo apt-get install libmysqlclient-dev -y
2.安裝phpmyadmin
$sudo apt-get install phpmyadmin -y
一、如何跟CloudSchool的API介接?
1.如何介接?請參考校務系統cloudschool API相關資料及實作與程式碼的關聯
2.介接之後,要如何整理資料?
1.如何介接?請參考校務系統cloudschool API相關資料及實作與程式碼的關聯
檔案名稱:ApiGetData.php
檔案內容:
<?php
// 3.雲端學籍系統內,學校的 API ID
$API_client_id = '學校的 API ID';
// 4.雲端學籍系統內,學校的 API 密碼
$API_client_secret = '學校的 API 密碼';
//取得API資料
$GetApiData = elps_API();
//印出API資料
PP($GetApiData);
function elps_API(){
global $API_client_id,$API_client_secret;
// =================================================
// 學生榮譽榜 (url: https://api.chc.edu.tw)
// 校務佈告欄 (url: https://api.chc.edu.tw/school-news)
// 同步學期資料 (url: https://api.chc.edu.tw/semester-data)
// 更改師生密碼 (url: https://api.chc.edu.tw/change-password)
// API NAME
$api_name = '/semester-data';
//$api_name = '/school-news';
// 更改師生密碼 (url: https://api.chc.edu.tw/change-password)
// API URL
$api_url = 'https://api.chc.edu.tw';
//: https://api.chc.edu.tw/school-news
// 建立 CURL 連線
$ch = curl_init();
// 取 access token
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_POST, TRUE);
// the variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $API_client_id,
'client_secret' => $API_client_secret,
'grant_type' => 'client_credentials'
));
$data = curl_exec($ch);
$data = json_decode($data);
$access_token = $data->access_token;
$authorization = "Authorization: Bearer ".$access_token;
curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
return $result;
}
/* 列印變數*/
function PP($a){
echo "<pre>";print_r($a);
echo "</pre>";exit;
}
?>
二、介接之後,如何取得的資料存入資料庫中?
1.如何用pdo建立資料庫?
2.如何用pdo建立資料表?
1.如何用pdo建立資料庫?
檔案名稱:PdoCreateDatabase.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
try {
//建立資料庫
$CONN =new PDO('mysql:host='.$MySQL['Host'], $MySQL['User'] ,$MySQL['Pass']);
$SQL="CREATE DATABASE ".$MySQL['Db']." CHARACTER SET utf8 COLLATE utf8_general_ci;";
$CONN->exec($SQL) or die($SQL);
backe("!!資料庫 ".$MySQL['Db']." OK!!");
}
catch (Exception $e)
{
backe("!!無法連結資料庫!!");
//die("<center><h2>無法連結資料庫</h2></center>");
}
##################回上頁函式1#####################
function backe($value= "BACK"){
//echo head();
echo "<meta charset='UTF-8'><br><br><CENTER>";
echo "<h4>--== 《系統訊息》 ==--</h4>";
echo "<div align=center onclick='history.back();' style='font-size:12pt;color:#A52A2A;'><b>";
echo $value;
echo "</b><BR></div><h5 onclick='history.back();'>--== 《按下後返回》 ==--</h5>";
exit;
}
?>
2.如何用pdo建立資料表?
(1).先檢查是否可從資料表取出一筆資料?
(1).Y.取得出,表示有此資料表->不建立資料表
(1).N.取不出,表示無此資料表->建立資料表
檔案名稱:PdoCreateTable.php
檔案內容:
<?php
$school_code='教育部學校代碼';
$MySQL['Host']='localhost';
$MySQL['User']='資料庫使用者';
$MySQL['Pass']='資料庫密碼';
$MySQL['Db']='Sport109_'.$school_code;
/*建立連結*/
try {
// for MySQL
$CONN =new PDO('mysql:host='.$MySQL['Host'].';dbname='.$MySQL['Db'], $MySQL['User'],$MySQL['Pass'], array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (Exception $e)
{
backe("!!無法連結資料庫!!");
//die("<center><h2>無法連結資料庫</h2></center>");
}
/* 建立 stud 資料表*/
$SQL1="select * from `stud` limit 1";
$SQL2="CREATE TABLE `stud`(
`id` INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`stuid` VARCHAR(10) NOT NULL UNIQUE,
`stuname` TEXT NOT NULL,
`idclass` TEXT NOT NULL,
`cla` TEXT NOT NULL,
`seatnum` INT(10) DEFAULT '0',
`sex` TEXT NOT NULL,
`edukey` TEXT,
`created` TEXT,
`modify` TEXT
);";
$rs=$CONN->query($SQL1);
if (!$rs) {
$rs=$CONN->query($SQL2) or die($SQL2);
} else {
backe('Had stud 資料表!');
}
##################回上頁函式1#####################
function backe($value= "BACK"){
//echo head();
echo "<meta charset='UTF-8'><br><br><CENTER>";
echo "<h4>--== 《系統訊息》 ==--</h4>";
echo "<div align=center onclick='history.back();' style='font-size:12pt;color:#A52A2A;'><b>";
echo $value;
echo "</b><BR></div><h5 onclick='history.back();'>--== 《按下後返回》 ==--</h5>";
exit;
}
?>
需要注意的是,同樣是建立資料表stud,建立資料表的語法會有些微不同
MYSQL語法:
CREATE TABLE `stud`(
`id` INTEGER PRIMARY KEY,
`stuid` VARCHAR(20) NOT NULL UNIQUE,
`stuname` TEXT NOT NULL,
`idclass` TEXT NOT NULL,
`cla` TEXT NOT NULL,
`seatnum` INTEGER DEFAULT '0',
`sex` TEXT NOT NULL,
`edukey` TEXT,
`created` TEXT,
`modify` TEXT
);
Sqlite語法:
CREATE TABLE `stud`(
`id` INTEGER PRIMARY KEY,
`stuid` TEXT NOT NULL UNIQUE,
`stuname` TEXT NOT NULL,
`idclass` TEXT NOT NULL,
`cla` TEXT NOT NULL,
`seatnum` INTEGER DEFAULT '0',
`sex` TEXT NOT NULL,
`edukey` TEXT,
`created` TEXT,
`modify` TEXT
);
9.PHP PDO
2020年10月27日 星期二
2020年10月11日 星期日
2020年9月9日 星期三
2020年4月26日 星期日
校務系統cloudschool API相關資料及實作與程式碼的關聯
一、實作
1.建立API
(1)進入彰化縣CloudSchool,系統管理->模組管理->API及憑證設定
3.測試方式,以 學期資料 api 為例 https://api.chc.edu.tw/semester-data
圖中的Access Token Request Endpoint為 https://api.chc.edu.tw/oauth?authorize
Client ID 為 用戶端ID
Client Secret 為 用戶端密碼
與程式碼的關聯
圖中按下1,2就會出現-> 3.按下 HEADERS
與程式碼的關聯
與程式碼的關聯
1.臺中市政府教育局校端 API 應用手冊 (1.0.0)
2.OAuth2 API
3.OAuth2 API
4.臺中市雲端校務系統與Windows AD帳號整合(7)
5.雲端校務系統與OPENLDAP帳號整合(3)
6.將 Cloud School 學期資料同步至校內伺服器資料庫
7.如何實作 Cloudschool OAUth2 認證?
8.[程式][PHP] 如何使用PHP CURL,基礎教學
9.[php]json_decode 將json轉成陣列或object
10.[PHP]curl抓取網頁
1.建立API
(1)進入彰化縣CloudSchool,系統管理->模組管理->API及憑證設定
(2)新增學校伺服器API
可以得到用戶端ID 與用戶端密碼
2.Rest API 測試工具3.測試方式,以 學期資料 api 為例 https://api.chc.edu.tw/semester-data
與程式碼的關聯
Client ID 為 用戶端ID
Client Secret 為 用戶端密碼
與程式碼的關聯
// API URL
$api_url = 'https://api.chc.edu.tw';
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
//設定CURLOPT_POST為TRUE或1,表示要用POST傳遞
curl_setopt($ch, CURLOPT_POST, TRUE);
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
////將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_POSTFIELDS後面則是要傳接的POST資料
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials'
));
與程式碼的關聯
//curl_exec($ch)為執行
$data = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($data);
//取 access token
$access_token = $data->access_token;
圖中按下1.,即可取的資料,如下圖與程式碼的關聯
//執行API
$authorization = "Authorization: Bearer ".$access_token;
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
//設定自定義http標頭set custom HTTP headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
//自定義字串的請求 custom string for request
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
//將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//是否抓取轉址
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
與程式碼的關聯˙\
//curl_exec($ch)為執行
$result = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($result);
// 關閉 CURL 連線
curl_close($ch);
OAuthApiTest.php
<?php
/**
同步遠端學校學期資料
**/
// 更改為學校的 API ID
$client_id = 'XXXXXXXXXXXXXXXXXXXXX';
// 更改為學校的 API 密碼
$client_secret = 'XXXXXXXXXXXXXXXXX';
// =================================================
// API NAME
$api_name = '/semester-data';
// API URL
$api_url = 'https://api.chc.edu.tw';
// 建立 CURL 連線
$ch = curl_init();
// 取 access token
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
//設定CURLOPT_POST為TRUE或1,表示要用POST傳遞
curl_setopt($ch, CURLOPT_POST, TRUE);
// the variable
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
////將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_POSTFIELDS後面則是要傳接的POST資料
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials'
));
//curl_exec($ch)為執行
$data = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($data);
//取 access token
$access_token = $data->access_token;
//執行API
$authorization = "Authorization: Bearer ".$access_token;
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
//設定自定義http標頭set custom HTTP headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
//自定義字串的請求 custom string for request
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
//將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//是否抓取轉址
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//curl_exec($ch)為執行
$result = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($result);
// 關閉 CURL 連線
curl_close($ch);
print_r($data);
?>
資料來源:1.臺中市政府教育局校端 API 應用手冊 (1.0.0)
2.OAuth2 API
3.OAuth2 API
4.臺中市雲端校務系統與Windows AD帳號整合(7)
5.雲端校務系統與OPENLDAP帳號整合(3)
6.將 Cloud School 學期資料同步至校內伺服器資料庫
7.如何實作 Cloudschool OAUth2 認證?
8.[程式][PHP] 如何使用PHP CURL,基礎教學
9.[php]json_decode 將json轉成陣列或object
10.[PHP]curl抓取網頁
2019年9月10日 星期二
在 xubuntu 16.04 實作 用 shell 為每個站點設定不同的php 版本
自從網頁主機集中,想要留舊網頁資料,提供查詢。
但又要建立新網頁,因應安全性需做更新。
以往的作法是在學校架新主機、新LAMP、xoops 新版本。
現在則是要在原有主機上,為每個站點設定不同php版本,以因應新的xoops版本。
看到網路資料,想實作看看。
1.安裝 apache2
sudo apt-get install -y apache2
2.安裝 mysql
sudo apt install -y mysql-server mysql-client libmysqlclient-dev mysql-workbench
3.安裝 php5.6
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php5.6-common php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-gd php5.6-curl php5.6-json php5.6-fpm php5.6-zip php5.6-mcrypt libapache2-mod-php5.6
4.安裝:php7.0
sudo apt-get install -y php7.0-common php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-xml php7.0-gd php7.0-curl php7.0-json php7.0-fpm php7.0-zip php7.0-mcrypt libapache2-mod-php7.0
5.安裝:php7.1
sudo apt-get install -y php7.1-common php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-xml php7.1-gd php7.1-curl php7.1-json php7.1-fpm php7.1-zip php7.1-mcrypt libapache2-mod-php7.1
6.開啟重寫轉向
sudo a2enmod rewrite
sudo a2enmod headers
7.重啟 apache2
sudo service apache2 restart
8.編輯bashrc 加入自定義命令,方便在不同php版本間切換
sudo vi .bashrc
寫入.bashrc, 其內容為
alias php56='sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2enmod php5.6 && sudo service apache2 restart'
alias php70='sudo a2dismod php5.6 && sudo a2dismod php7.1 && sudo a2enmod php7.0 && sudo service apache2 restart'
alias php71='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2enmod php7.1 && sudo service apache2 restart'
安裝完成後,重啟電腦,預設是執行5.6版本的php
但命令列下php-v 是顯示最高版本7.1
在/etc/php目錄下有對應版本號的資料夾,
編輯相應的php.ini可配置相應的php版本,
命令列下php56可切換到php5.6版本
命令列下php70可切換到php7.0版本
命令列下php71可切換到php7.1版本
或是在linux 命令列
x-www-browser 'http://192.168.32.199/php56'
x-www-browser 'http://192.168.32.199/php70'
x-www-browser 'http://192.168.32.199/php71'
現在我們將上述步驟1~步驟10寫成shell,其檔名為lampmulti.sh。
其內容如下:
#!/bin/sh
apt-get install -y apache2
apt install -y mysql-server mysql-client libmysqlclient-dev mysql-workbench
add-apt-repository ppa:ondrej/php -y
apt-get update
apt-get install -y php5.6-common php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-gd php5.6-curl php5.6-json php5.6-fpm php5.6-zip php5.6-mcrypt libapache2-mod-php5.6
apt-get install -y php7.0-common php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-xml php7.0-gd php7.0-curl php7.0-json php7.0-fpm php7.0-zip php7.0-mcrypt libapache2-mod-php7.0
apt-get install -y php7.1-common php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-xml php7.1-gd php7.1-curl php7.1-json php7.1-fpm php7.1-zip php7.1-mcrypt libapache2-mod-php7.1
a2enmod rewrite
a2enmod headers
service apache2 restart
echo "alias php56='sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2enmod php5.6 && sudo service apache2 restart'" >> .bashrc
echo "alias php70='sudo a2dismod php5.6 && sudo a2dismod php7.1 && sudo a2enmod php7.0 && sudo service apache2 restart'" >> .bashrc
echo "alias php71='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2enmod php7.1 && sudo service apache2 restart'" >> .bashrc
cd /etc/apache2/sites-available/
cp 000-default.conf 000-default.conf.bk
echo "<VirtualHost *:80>" > 000-default.conf
echo " ServerAdmin webmaster@localhost" >> 000-default.conf
echo " DocumentRoot /var/www/html" >> 000-default.conf
echo " <Directory \"/var/www/html/php56\">" >> 000-default.conf
echo " Options FollowSymLinks" >> 000-default.conf
echo " AllowOverride All" >> 000-default.conf
echo " #Require all denied" >> 000-default.conf
echo " Require all granted" >> 000-default.conf
echo " <FilesMatch \.php$>" >> 000-default.conf
echo " SetHandler \"proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost\"" >> 000-default.conf
echo " </FilesMatch>" >> 000-default.conf
echo " </Directory>" >> 000-default.conf
echo " <Directory \"/var/www/html/php70\">" >> 000-default.conf
echo " Options FollowSymLinks" >> 000-default.conf
echo " AllowOverride All" >> 000-default.conf
echo " #Require all denied" >> 000-default.conf
echo " Require all granted" >> 000-default.conf
echo " <FilesMatch \.php$>" >> 000-default.conf
echo " SetHandler \"proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost\"" >> 000-default.conf
echo " </FilesMatch>" >> 000-default.conf
echo " </Directory>" >> 000-default.conf
echo " <Directory \"/var/www/html/php71\">" >> 000-default.conf
echo " Options FollowSymLinks" >> 000-default.conf
echo " AllowOverride All" >> 000-default.conf
echo " #Require all denied" >> 000-default.conf
echo " Require all granted" >> 000-default.conf
echo " <FilesMatch \.php$>" >> 000-default.conf
echo " SetHandler \"proxy:unix:/run/php/php7.1-fpm.sock|fcgi://localhost\"" >> 000-default.conf
echo " </FilesMatch>" >> 000-default.conf
echo " </Directory>" >> 000-default.conf
echo " ErrorLog ${APACHE_LOG_DIR}/error.log" >> 000-default.conf
echo " CustomLog ${APACHE_LOG_DIR}/access.log combined" >> 000-default.conf
echo "</VirtualHost>" >> 000-default.conf
cd /var/www/html/
mkdir php56 php70 php71
touch index.php
echo "<?php phpinfo(); ?>" > index.php
cp index.php /var/www/html/php56/
cp index.php /var/www/html/php70/
mv index.php /var/www/html/php71/
chmod 755 php56 php70 php71 -R
用 sudo pico lampmulti.sh,將上面紅色字貼到lampmulti.sh
接下來,將lampmulti.sh權限改為可執行,其指令為 sudo chmod +x lampmulti.sh
執行lampmulti.sh,其指令為 sudo sh lampmulti.sh
注意事項:
1.有些時候會無法完整安裝,這時要下指令要加--fix-missing
意即 sudo sh lampmulti --fix-missing
才能夠針對缺項進行完整安裝
2.網頁編碼的問題,可加上
<?php
header("Content-Type:text/html; charset=utf-8");
?>
1.在 xubuntu 16.04中
需先檢查/etc/apache2/conf-available/chartset.conf
AddDefaultCharset UTF-8 前面是否加上 # ,即#AddDefaultCharset UTF-8
2.在 xubuntu 16.04中
需先檢查/etc/php/5.6/apahe2/php.ini 中的default_charset = "UTF-8" 前面要加;,即;default_charset = "UTF-8"
需先檢查/etc/php/7.0/apahe2/php.ini 中的default_charset = "UTF-8" 前面要加;,即;default_charset = "UTF-8"
需先檢查/etc/php/7.1/apahe2/php.ini 中的default_charset = "UTF-8" 前面要加;,即;default_charset = "UTF-8"
目前實驗在此伺服器中,安裝sfs3,其目錄在php56/sfs3。
登入後,會出現錯誤
3.使用adminer 作為MySQL資料庫管理工具
資料來源:
1.ubuntu php多版本共存切換,為每個站點設定不同的php版本
2.詳解Ubuntu/CentOS下Apache多站點配置
3.Shell echo命令
4.Mac/Linux/Windows通過命令調用瀏覽器打開某網頁
5.網頁(UTF-8) 於 瀏覽器 出現亂碼解法
6.強迫網頁預設編碼語系
7.Adminer羽量級MySQL資料庫管理工具,可完全取代phpMyAdmin,且無檔案匯入大小限制
但又要建立新網頁,因應安全性需做更新。
以往的作法是在學校架新主機、新LAMP、xoops 新版本。
現在則是要在原有主機上,為每個站點設定不同php版本,以因應新的xoops版本。
看到網路資料,想實作看看。
1.安裝 apache2
sudo apt-get install -y apache2
2.安裝 mysql
sudo apt install -y mysql-server mysql-client libmysqlclient-dev mysql-workbench
3.安裝 php5.6
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php5.6-common php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-gd php5.6-curl php5.6-json php5.6-fpm php5.6-zip php5.6-mcrypt libapache2-mod-php5.6
4.安裝:php7.0
sudo apt-get install -y php7.0-common php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-xml php7.0-gd php7.0-curl php7.0-json php7.0-fpm php7.0-zip php7.0-mcrypt libapache2-mod-php7.0
5.安裝:php7.1
sudo apt-get install -y php7.1-common php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-xml php7.1-gd php7.1-curl php7.1-json php7.1-fpm php7.1-zip php7.1-mcrypt libapache2-mod-php7.1
6.開啟重寫轉向
sudo a2enmod rewrite
sudo a2enmod headers
7.重啟 apache2
sudo service apache2 restart
8.編輯bashrc 加入自定義命令,方便在不同php版本間切換
sudo vi .bashrc
寫入.bashrc, 其內容為
alias php56='sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2enmod php5.6 && sudo service apache2 restart'
alias php70='sudo a2dismod php5.6 && sudo a2dismod php7.1 && sudo a2enmod php7.0 && sudo service apache2 restart'
alias php71='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2enmod php7.1 && sudo service apache2 restart'
安裝完成後,重啟電腦,預設是執行5.6版本的php
但命令列下php-v 是顯示最高版本7.1
在/etc/php目錄下有對應版本號的資料夾,
編輯相應的php.ini可配置相應的php版本,
命令列下php56可切換到php5.6版本
命令列下php70可切換到php7.0版本
命令列下php71可切換到php7.1版本
9.備份/etc/apache2/site-available/000-default.conf後修改,其指令為
cd /etc/apache2/site-available/
sudo cp 000-default.conf 000-default.conf.bk
sudo pico 000-default.conf
其內容如下:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory "/var/www/html/php56">
Options FollowSymLinks
AllowOverride All
#Require all denied
Require all granted
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost"
</FilesMatch>
</Directory>
<Directory "/var/www/html/php70">
Options FollowSymLinks
AllowOverride All
#Require all denied
Require all granted
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
</Directory>
<Directory "/var/www/html/php71">
Options FollowSymLinks
AllowOverride All
#Require all denied
Require all granted
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php7.1-fpm.sock|fcgi://localhost"
</FilesMatch>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
啟用Apache2 模組 proxy proxy_fcgi
sudo a2enmod proxy proxy_fcgi
重啟 Apache2
sudo service apache2 restart
10.在/var/www/html/,新增三個資料夾,分別為 php56 php70 php71
在這三個資料夾,新增index.php,其內容為 <?php phpinfo(); ?>
變更 這三個資料夾及其內容 的權限。其指令如下:
cd /var/www/html/
sudo mkdir php56 php70 php71
sudo touch index.php
sudo echo "<?php phpinfo(); ?>" > index.php
sudo cp index.php /var/www/html/php56/
sudo cp index.php /var/www/html/php70/
sudo mv index.php /var/www/html/php71/
sudo chmod 755 php56 php70 php71 -R
11.打開瀏覽器,並在其網址列,打上 http://IP/php56、http://IP/php70、http://IP/php71
可以看到如下
目前伺服器位址為:192.168.32.199
或是在linux 命令列
x-www-browser 'http://192.168.32.199/php56'
x-www-browser 'http://192.168.32.199/php70'
x-www-browser 'http://192.168.32.199/php71'
現在我們將上述步驟1~步驟10寫成shell,其檔名為lampmulti.sh。
其內容如下:
#!/bin/sh
apt-get install -y apache2
apt install -y mysql-server mysql-client libmysqlclient-dev mysql-workbench
add-apt-repository ppa:ondrej/php -y
apt-get update
apt-get install -y php5.6-common php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-gd php5.6-curl php5.6-json php5.6-fpm php5.6-zip php5.6-mcrypt libapache2-mod-php5.6
apt-get install -y php7.0-common php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-xml php7.0-gd php7.0-curl php7.0-json php7.0-fpm php7.0-zip php7.0-mcrypt libapache2-mod-php7.0
apt-get install -y php7.1-common php7.1-mbstring php7.1-mcrypt php7.1-mysql php7.1-xml php7.1-gd php7.1-curl php7.1-json php7.1-fpm php7.1-zip php7.1-mcrypt libapache2-mod-php7.1
a2enmod rewrite
a2enmod headers
service apache2 restart
echo "alias php56='sudo a2dismod php7.0 && sudo a2dismod php7.1 && sudo a2enmod php5.6 && sudo service apache2 restart'" >> .bashrc
echo "alias php70='sudo a2dismod php5.6 && sudo a2dismod php7.1 && sudo a2enmod php7.0 && sudo service apache2 restart'" >> .bashrc
echo "alias php71='sudo a2dismod php5.6 && sudo a2dismod php7.0 && sudo a2enmod php7.1 && sudo service apache2 restart'" >> .bashrc
cd /etc/apache2/sites-available/
cp 000-default.conf 000-default.conf.bk
echo "<VirtualHost *:80>" > 000-default.conf
echo " ServerAdmin webmaster@localhost" >> 000-default.conf
echo " DocumentRoot /var/www/html" >> 000-default.conf
echo " <Directory \"/var/www/html/php56\">" >> 000-default.conf
echo " Options FollowSymLinks" >> 000-default.conf
echo " AllowOverride All" >> 000-default.conf
echo " #Require all denied" >> 000-default.conf
echo " Require all granted" >> 000-default.conf
echo " <FilesMatch \.php$>" >> 000-default.conf
echo " SetHandler \"proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost\"" >> 000-default.conf
echo " </FilesMatch>" >> 000-default.conf
echo " </Directory>" >> 000-default.conf
echo " <Directory \"/var/www/html/php70\">" >> 000-default.conf
echo " Options FollowSymLinks" >> 000-default.conf
echo " AllowOverride All" >> 000-default.conf
echo " #Require all denied" >> 000-default.conf
echo " Require all granted" >> 000-default.conf
echo " <FilesMatch \.php$>" >> 000-default.conf
echo " SetHandler \"proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost\"" >> 000-default.conf
echo " </FilesMatch>" >> 000-default.conf
echo " </Directory>" >> 000-default.conf
echo " <Directory \"/var/www/html/php71\">" >> 000-default.conf
echo " Options FollowSymLinks" >> 000-default.conf
echo " AllowOverride All" >> 000-default.conf
echo " #Require all denied" >> 000-default.conf
echo " Require all granted" >> 000-default.conf
echo " <FilesMatch \.php$>" >> 000-default.conf
echo " SetHandler \"proxy:unix:/run/php/php7.1-fpm.sock|fcgi://localhost\"" >> 000-default.conf
echo " </FilesMatch>" >> 000-default.conf
echo " </Directory>" >> 000-default.conf
echo " ErrorLog ${APACHE_LOG_DIR}/error.log" >> 000-default.conf
echo " CustomLog ${APACHE_LOG_DIR}/access.log combined" >> 000-default.conf
echo "</VirtualHost>" >> 000-default.conf
a2enmod proxy proxy_fcgi
service apache2 restartcd /var/www/html/
mkdir php56 php70 php71
touch index.php
echo "<?php phpinfo(); ?>" > index.php
cp index.php /var/www/html/php56/
cp index.php /var/www/html/php70/
mv index.php /var/www/html/php71/
chmod 755 php56 php70 php71 -R
service apache2 restart
直接用 SSH 連接到Server,用 sudo pico lampmulti.sh,將上面紅色字貼到lampmulti.sh
接下來,將lampmulti.sh權限改為可執行,其指令為 sudo chmod +x lampmulti.sh
執行lampmulti.sh,其指令為 sudo sh lampmulti.sh
注意事項:
1.有些時候會無法完整安裝,這時要下指令要加--fix-missing
意即 sudo sh lampmulti --fix-missing
才能夠針對缺項進行完整安裝
2.網頁編碼的問題,可加上
<?php
header("Content-Type:text/html; charset=utf-8");
?>
1.在 xubuntu 16.04中
需先檢查/etc/apache2/conf-available/chartset.conf
AddDefaultCharset UTF-8 前面是否加上 # ,即#AddDefaultCharset UTF-8
2.在 xubuntu 16.04中
需先檢查/etc/php/5.6/apahe2/php.ini 中的default_charset = "UTF-8" 前面要加;,即;default_charset = "UTF-8"
需先檢查/etc/php/7.0/apahe2/php.ini 中的default_charset = "UTF-8" 前面要加;,即;default_charset = "UTF-8"
需先檢查/etc/php/7.1/apahe2/php.ini 中的default_charset = "UTF-8" 前面要加;,即;default_charset = "UTF-8"
目前實驗在此伺服器中,安裝sfs3,其目錄在php56/sfs3。
登入後,會出現錯誤
3.使用adminer 作為MySQL資料庫管理工具
資料來源:
1.ubuntu php多版本共存切換,為每個站點設定不同的php版本
2.詳解Ubuntu/CentOS下Apache多站點配置
3.Shell echo命令
4.Mac/Linux/Windows通過命令調用瀏覽器打開某網頁
5.網頁(UTF-8) 於 瀏覽器 出現亂碼解法
6.強迫網頁預設編碼語系
7.Adminer羽量級MySQL資料庫管理工具,可完全取代phpMyAdmin,且無檔案匯入大小限制
2019年4月20日 星期六
php socket 修正 Server 與 Client 實作 (一)
目的:
1.Server端:能接收client傳來的訊息並寫入檔案且不傳訊息給client
2.Client端:不接收server傳來的訊息
Server端IP:192.168.32.102 Port:25001
檔名:ServerSocket.php ,檔案所在位置為 /home/webadmin/ServerSocket.php
<?php
$server_ip = '192.168.32.102';
$port = 25001;
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,$server_ip,$port);
socket_listen($socket,SOMAXCONN);
$count = 0;
do {
$msgsocket = socket_accept($socket);
if ($msgsocket < 0) {
echo "socket_accept() fail : ".socket_strerror(socket_last_error())."\n";
break;
} else {
$datetime = date('Y-m-d H:i:s',time());
$str = "Server datetime:{$datetime}\n";
$buff = socket_read($msgsocket,2048);
$str .= "Receive client message: {$buff}"." count: ".$count."\n\n";
echo $str;
$str01 = $buff." ".$datetime."\n";
if ($str01!="") {
$file = fopen("/home/webadmin/html/ServerSocket", "a+");
fwrite($file, $str01);
fclose($file);
}
}
$count++;
socket_close($msgsocket);
} while ($count <= 5);
socket_close($socket);
?>
資料來源:
1.php socket 初步實作Server 與 Client
2.[PHP]開啟及寫入檔案
1.Server端:能接收client傳來的訊息並寫入檔案且不傳訊息給client
2.Client端:不接收server傳來的訊息
Server端IP:192.168.32.102 Port:25001
檔名:ServerSocket.php ,檔案所在位置為 /home/webadmin/ServerSocket.php
<?php
$server_ip = '192.168.32.102';
$port = 25001;
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,$server_ip,$port);
socket_listen($socket,SOMAXCONN);
$count = 0;
do {
$msgsocket = socket_accept($socket);
if ($msgsocket < 0) {
echo "socket_accept() fail : ".socket_strerror(socket_last_error())."\n";
break;
} else {
$datetime = date('Y-m-d H:i:s',time());
$str = "Server datetime:{$datetime}\n";
$buff = socket_read($msgsocket,2048);
$str .= "Receive client message: {$buff}"." count: ".$count."\n\n";
echo $str;
$str01 = $buff." ".$datetime."\n";
if ($str01!="") {
$file = fopen("/home/webadmin/html/ServerSocket", "a+");
fwrite($file, $str01);
fclose($file);
}
}
$count++;
socket_close($msgsocket);
} while ($count <= 5);
socket_close($socket);
?>
執行 ServerSocket.php 的指令
$php ServerSocket.php
$php ServerSocket.php
Client端:IP:192.168.32.182
檔名:client.php
傳送$in 的內容給 Server 端
<?php
$server_ip = '192.168.32.102';
$port = 25001;
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($socket,$server_ip,$port);
$in = "\$\$H167,864292040653451,AAA,35\n";
socket_write($socket,$in,strlen($in));
socket_close($socket);
1.php socket 初步實作Server 與 Client
2.[PHP]開啟及寫入檔案
2019年4月18日 星期四
利用 swoole 架設 websocket 進階範例
1.安裝套件
sudo apt-get install curl
2.安裝 composer
$curl -sS https://getcomposer.org/installer | php
$sudo mv composer.phar /usr/local/bin/composer
$sudo chmod +x /usr/local/bin/composer
$composer
3.建立 composer.json
$sudo touch composer.json
$sudo pico composer.json
其內容為
{
"require": {
"jsnlib/swoole": "^1.0"
}
}
4.安裝套件
$composer update
5.建立與編輯 swoole_advanced.php
$sudo touch swoole_advanced.php
$sudo pico swoole_advanced.php
swoole_advanced.php 所在的IP: 192.168.32.106
其內容為
<?php
require_once 'vendor/autoload.php';
// 建立 websocket 物件,監聽 192.168.32.106:8080 連接埠
$ws = new swoole_websocket_server("192.168.32.106", 8080);
// 監聽 WebSocket 連接打開事件
$ws->on('open', function ($ws, $request) {
echo "進入者編號:{$request->fd}\n";
});
// 監聽 WebSocket 訊息事件
$ws->on('message', function ($ws, $frame) {
echo "收到進入者 {$frame->fd} 訊息: {$frame->data} \n";
\Jsnlib\Swoole::push_all([
'ws' => $ws,
'self' => $frame->fd,
'is_send_self' => false,
'data' => $frame->data
]);
});
// 今天 WebSocket 連接關閉事件
$ws->on('close', function ($ws, $fd) {
echo "離開者編號:{$fd}\n";
});
$ws->start();
?>
6.建立 client_swoole_advance.html
$sudo touch client_swoole_advance.html
$sudo pico client_swoole_advance.html
client_swoole_advance.html 所在位置IP:192.168.32.182,/home/webadmin/html/
其內容為
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
var wsServer = 'ws://192.168.32.106:8080';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log("成功連接到 WebSocket 服務");
};
websocket.onclose = function (evt) {
console.log("關閉連接 WebSocket 服務");
};
websocket.onmessage = function (evt) {
console.log('伺服器顯示:' + evt.data);
};
websocket.onerror = function (evt, e) {
console.log('發生錯誤: ' + evt.data);
};
// 發送訊息給所有人
const send_msg = function (){
var name = document.getElementsByClassName('name')[0].value;
var msg = JSON.stringify({
message: '你好,我是' + name,
})
websocket.send(msg)
}
</script>
</head>
<body>
<input type="text" class="name" placeholder="請輸入姓名" autofocus>
<input type="submit" value="發送" onclick="send_msg(); ">
</body>
</html>
7.server端 在終端機啟動 swoole_advance.php
$php swoole_advance.php
8.client端 用瀏覽器 chrome 打開 或是 指令開啟
$cd /home/webadmin/html
$google-chrome client_swoole_advance.html
此時,server端會出現進入者編號:1
client端 開啟[開發人員工具]
可以看到
此時,若在[請輸入姓名],輸入Jack後,按下[發送]
server端會出現 收到進入者 1 訊息: {"message":"你好,我是Jack"}
此時,第一分頁則會出現
資料來源:
1.php – swoole – 架設 websocket 進階範例
sudo apt-get install curl
2.安裝 composer
$curl -sS https://getcomposer.org/installer | php
$sudo mv composer.phar /usr/local/bin/composer
$sudo chmod +x /usr/local/bin/composer
$composer
3.建立 composer.json
$sudo touch composer.json
$sudo pico composer.json
其內容為
{
"require": {
"jsnlib/swoole": "^1.0"
}
}
4.安裝套件
$composer update
5.建立與編輯 swoole_advanced.php
$sudo touch swoole_advanced.php
$sudo pico swoole_advanced.php
swoole_advanced.php 所在的IP: 192.168.32.106
其內容為
<?php
require_once 'vendor/autoload.php';
// 建立 websocket 物件,監聽 192.168.32.106:8080 連接埠
$ws = new swoole_websocket_server("192.168.32.106", 8080);
// 監聽 WebSocket 連接打開事件
$ws->on('open', function ($ws, $request) {
echo "進入者編號:{$request->fd}\n";
});
// 監聽 WebSocket 訊息事件
$ws->on('message', function ($ws, $frame) {
echo "收到進入者 {$frame->fd} 訊息: {$frame->data} \n";
\Jsnlib\Swoole::push_all([
'ws' => $ws,
'self' => $frame->fd,
'is_send_self' => false,
'data' => $frame->data
]);
});
// 今天 WebSocket 連接關閉事件
$ws->on('close', function ($ws, $fd) {
echo "離開者編號:{$fd}\n";
});
$ws->start();
?>
6.建立 client_swoole_advance.html
$sudo touch client_swoole_advance.html
$sudo pico client_swoole_advance.html
client_swoole_advance.html 所在位置IP:192.168.32.182,/home/webadmin/html/
其內容為
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
var wsServer = 'ws://192.168.32.106:8080';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log("成功連接到 WebSocket 服務");
};
websocket.onclose = function (evt) {
console.log("關閉連接 WebSocket 服務");
};
websocket.onmessage = function (evt) {
console.log('伺服器顯示:' + evt.data);
};
websocket.onerror = function (evt, e) {
console.log('發生錯誤: ' + evt.data);
};
// 發送訊息給所有人
const send_msg = function (){
var name = document.getElementsByClassName('name')[0].value;
var msg = JSON.stringify({
message: '你好,我是' + name,
})
websocket.send(msg)
}
</script>
</head>
<body>
<input type="text" class="name" placeholder="請輸入姓名" autofocus>
<input type="submit" value="發送" onclick="send_msg(); ">
</body>
</html>
7.server端 在終端機啟動 swoole_advance.php
$php swoole_advance.php
8.client端 用瀏覽器 chrome 打開 或是 指令開啟
$cd /home/webadmin/html
$google-chrome client_swoole_advance.html
此時,server端會出現進入者編號:1
client端 開啟[開發人員工具]
可以看到
此時,若在[請輸入姓名],輸入Jack後,按下[發送]
server端會出現 收到進入者 1 訊息: {"message":"你好,我是Jack"}
開啟第二個分頁,並將第一分頁的網址貼上,然後打上[ Wood ],按下送出。如下圖:
server端會出現此時,第一分頁則會出現
資料來源:
1.php – swoole – 架設 websocket 進階範例
2019年4月11日 星期四
利用 swoole 架設 websocket 簡單範例
從資料來源1 開始實作。
老實說,很多程式碼看不懂,只是造本宣科而已。但還是將之記錄起來,至少是寫給自己看。
分成兩台。分成Server端與Client端。Server端IP:192.168.32.106,Client端IP:192.168.32.182
兩端檔案位置均放置在 /home/webadmin/html/ 下
1.首先是Server端,檔名為 swoole.php
<?php
// 建立 websocket 物件,監聽 192.168.32.106:8080 連接埠
$ws = new swoole_websocket_server("192.168.32.106", 8080);
// 監聽 WebSocket 連接打開事件
$ws->on('open', function ($ws, $request) {
var_dump($request->fd, $request->get, $request->server);
$ws->push($request->fd, "hello, welcome\n");
});
// 監聽 WebSocket 訊息事件
$ws->on('message', function ($ws, $frame) {
echo "Message: {$frame->data}\n";
$ws->push($frame->fd, $frame->data);
});
// 今天 WebSocket 連接關閉事件
$ws->on('close', function ($ws, $fd) {
echo "client-{$fd} is closed\n";
});
$ws->start();
?>
2.程式碼完成後,在command line 打上
$php swoole.php
然後等待 client 端來接
3.接下來是 Client端,檔名為 client_swoole.html
<html>
<head>
<title> client swoole test</title>
<script>
var wsServer = 'ws://192.168.32.106:8080';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log("Success to connect WebSocket Server");
};
websocket.onclose = function (evt) {
console.log("Closed to connect WebSocket Server");
};
websocket.onmessage = function (evt) {
console.log('The message which is recived from the WebSocket Server is the: ' + evt.data);
};
websocket.onerror = function (evt,e) {
console.log('Error: ' + evt.data);
}
</script>
</head>
<body>
</body>
</html>
4.程式碼打完,用瀏覽器開啟。
5.Server端的command line 會出現
6.Client端瀏覽器為chrome,利用開發人員工具,來看一些訊息
7.如何關閉Server端的服務
開新的終端機,下指令
$ps -fC php
然後接著下
$kill 7070
就會出現訊息:
[2019-04-11 22:34:43 #7070.4] INFO Server is shutdown now
資料來源
1.php – swoole – 架設 websocket 簡單範例
老實說,很多程式碼看不懂,只是造本宣科而已。但還是將之記錄起來,至少是寫給自己看。
分成兩台。分成Server端與Client端。Server端IP:192.168.32.106,Client端IP:192.168.32.182
兩端檔案位置均放置在 /home/webadmin/html/ 下
1.首先是Server端,檔名為 swoole.php
<?php
// 建立 websocket 物件,監聽 192.168.32.106:8080 連接埠
$ws = new swoole_websocket_server("192.168.32.106", 8080);
// 監聽 WebSocket 連接打開事件
$ws->on('open', function ($ws, $request) {
var_dump($request->fd, $request->get, $request->server);
$ws->push($request->fd, "hello, welcome\n");
});
// 監聽 WebSocket 訊息事件
$ws->on('message', function ($ws, $frame) {
echo "Message: {$frame->data}\n";
$ws->push($frame->fd, $frame->data);
});
// 今天 WebSocket 連接關閉事件
$ws->on('close', function ($ws, $fd) {
echo "client-{$fd} is closed\n";
});
$ws->start();
?>
2.程式碼完成後,在command line 打上
$php swoole.php
然後等待 client 端來接
3.接下來是 Client端,檔名為 client_swoole.html
<html>
<head>
<title> client swoole test</title>
<script>
var wsServer = 'ws://192.168.32.106:8080';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log("Success to connect WebSocket Server");
};
websocket.onclose = function (evt) {
console.log("Closed to connect WebSocket Server");
};
websocket.onmessage = function (evt) {
console.log('The message which is recived from the WebSocket Server is the: ' + evt.data);
};
websocket.onerror = function (evt,e) {
console.log('Error: ' + evt.data);
}
</script>
</head>
<body>
</body>
</html>
4.程式碼打完,用瀏覽器開啟。
5.Server端的command line 會出現
6.Client端瀏覽器為chrome,利用開發人員工具,來看一些訊息
7.如何關閉Server端的服務
開新的終端機,下指令
$ps -fC php
然後接著下
$kill 7070
就會出現訊息:
[2019-04-11 22:34:43 #7070.4] INFO Server is shutdown now
資料來源
1.php – swoole – 架設 websocket 簡單範例
phpstorm 2017 安裝 swoole-ide-helper 套件
1.下載swoole-ide-helper
$git clone https://github.com/wudi/swoole-ide-helper.git
2.開啟PHPStorm
$phpstorm
3.選擇External Libraries,按下滑鼠選擇右鍵。選擇Configure PHP Include Path
4.選擇下載好的swoole-ide-helper目錄,點選確定。
資料來源:
1.phpstorm增加swoole自動提示
$git clone https://github.com/wudi/swoole-ide-helper.git
2.開啟PHPStorm
$phpstorm
3.選擇External Libraries,按下滑鼠選擇右鍵。選擇Configure PHP Include Path
4.選擇下載好的swoole-ide-helper目錄,點選確定。
5.重啟phpstorm,打上 $ws = new ,就會出現
1.phpstorm增加swoole自動提示
2019年4月8日 星期一
在 xubuntu 16.04 apache2 php 7.2 環境下,安裝 swoole
安裝swoole 前,請更新系統與套件。其指令為
$sudo apt-get update
$sudo apt-get upgrade
更新系統與套件期間,會有一些錯誤訊息
錯誤訊息1、錯誤訊息2
更新系統與套件後,就可開始swoole 安裝動作
1.安裝 aptitude php
$sudo apt-get install aptitude
2.安裝 php7.2-dev
$sudo aptitude install php7.2-dev
3.安裝 cmake gcc autoconf pcre make git
$sudo aptitude install cmake gcc autoconf pcre make git
4.下載swoole
$git clone https://github.com/swoole/swoole-src.git
此時的swoole-src 會在目前的使用者目錄下,即 /home/webadmin/
5.依序下指令
$cd swoole-src
$phpize
$./configure
$make
$sudo make install
此時會在 /home/webadmin/swoole-src/modules/ 出現 swoole.so
6.修改/etc/php/7.2/cli/php.ini 與 /etc/php/7.2/apache2/php.ini
將extension=/home/webadmin/swoole-src/modules/swoole.so 加入。
$sudo pico /etc/php/7.2/cli/php.ini
$sudo pico /etc/php/7.2/apache2/php.ini
7.重啟 apache2
$sudo service apache2 restart
8.檢查php 模組列表
$php -m
資料來源:
1.PHP 的性能猛獸 - Swoole
2.php – swoole 安裝
$sudo apt-get update
$sudo apt-get upgrade
更新系統與套件期間,會有一些錯誤訊息
錯誤訊息1、錯誤訊息2
更新系統與套件後,就可開始swoole 安裝動作
1.安裝 aptitude php
$sudo apt-get install aptitude
2.安裝 php7.2-dev
$sudo aptitude install php7.2-dev
3.安裝 cmake gcc autoconf pcre make git
$sudo aptitude install cmake gcc autoconf pcre make git
4.下載swoole
$git clone https://github.com/swoole/swoole-src.git
此時的swoole-src 會在目前的使用者目錄下,即 /home/webadmin/
5.依序下指令
$cd swoole-src
$phpize
$./configure
$make
$sudo make install
此時會在 /home/webadmin/swoole-src/modules/ 出現 swoole.so
6.修改/etc/php/7.2/cli/php.ini 與 /etc/php/7.2/apache2/php.ini
將extension=/home/webadmin/swoole-src/modules/swoole.so 加入。
$sudo pico /etc/php/7.2/cli/php.ini
7.重啟 apache2
$sudo service apache2 restart
8.檢查php 模組列表
$php -m
資料來源:
1.PHP 的性能猛獸 - Swoole
2.php – swoole 安裝
訂閱:
文章 (Atom)
在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版
相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html