Linux, Speedtest, Monitoring · 6 min read · Nov 11, 2025
Linuxサーバーでspeedtestを使用してインターネット速度をグラフィカルにチェック、保存、報告する方法
ブロードバンド接続の問題に直面した結果、プロバイダーから得られるMbps速度を定期的に監視したいと考えました。特に夜間にファイルをダウンロードしようとした際に非常に悪い数字が見られ、早朝にははるかに速い速度が得られました。
隅に置いてあるLinux Debianサーバーがあり、これはISPConfigでホストされたウェブサイトのテストおよび開発マシンであり、私が遊ぶのが好きなLet’s Encryptコードもあるため、Linuxコマンドラインから実行できる帯域幅テストを可能にするソフトウェアを探しました。これにより、必要な生データを生成する自動化されたシェルスクリプトシステムの基盤を形成できると考えました。データをSQLデータベースに保存してクエリを簡単にし(その後、興味のある期間の小さなサブセットを簡単に抽出できる)、データを視覚化して接続の問題を強調するシンプルなチャートを生成できるウェブフロントエンドを持ちたいと思いました。
私の検索の最初の結果は、Antonio Valenciaによる非常に役立つ記事でした: https://www.howtoforge.com/tutorial/check-internet-speed-with-speedtest-cli-on-ubuntu/
そこでspeedtestをインストールするための指示に従ったところ、さまざまなインターネットサーバーに対してテストを実行し、CSV形式で出力を生成できることがわかりました。これは、ソフトウェア開発において最小限の労力でSQLテーブルに直接インポートするのに適しています。
生成されるデータの量が比較的少ないため、バックエンドストアとしてSQLiteを使用することに決め、利用可能なオープンソースのJavaScriptベースのグラフライブラリを簡単に検索した結果、chart.jsにたどり着きました。これはシンプルでクリーンなデザインで、シンプルなデータインターフェースを持ちながら、必要に応じて高度なオプションを調整する能力も豊富です。SQLデータを変換して、グラフ化したいデータのサブセットをJSON経由で出力するために、いくつかの簡単なPHPコードを使用するのが良い方法でした。
全体として、次のようなシステムを設計する必要がありました:
- speedtestをcronjobとして実行するLinuxサーバー - おそらく1時間ごと - speedtestの出力がSQLiteデータベースに保存され、すべてがbashシェルスクリプトファイルによって制御される。
- HTML、CSS、JavaScript、PHPの混合で構成されたウェブフロントエンドがSQLiteからデータを抽出し、前の24時間(または私が決定する他の期間)のMbps数値を示す棒グラフを生成する。
speedtestをインタラクティブに十数回実行してみたところ、私が経験している速度と密接に一致する結果を提供するサーバーがいくつかあることがわかりました。ターゲットサーバーの場所や異なるタイムゾーンの時間によってMbps数値がどのように影響を受けるかをよりよく把握するために、1つ以上のサーバーに対してテストするのは良いアイデアだと考えました。
同様のシステムを自分で設定したい場合は、あなたの場所に合ったspeedtest用のサーバーを数百の中から選択する必要があります。
1 前提条件
- Linuxサーバー - 私はDebian 9.1 - stretchを使用しています
- rootログインでサーバーへのttyアクセス - 私はWindowsラップトップからPuTTYを使用しています
- ISPConfigがインストールされ、FTPアカウントを持つウェブサイトが構成されている - 私はapacheをウェブサーバーとして設定した3.1.6を使用しています(以下の指示にいくつかの小さな変更を加えれば、ウェブサーバーだけで管理できます)
- PHP - 私は7.0を使用していますが、ほとんどの以前のバージョンでも動作するはずです
- FTPクライアント - 私はFilezillaを使用しており、サーバー上でPureFTPdが実行されています
- nano - またはお気に入りのビジュアルエディタ
ここでは、Linuxサーバーにログインし、ディレクトリを移動し、ウェブサーバーがファイルを期待するレイアウトを理解し、FTPでファイルをこれらのディレクトリに転送することに慣れていると仮定しています。
これらすべてを設定するための詳細な手順は以下の通りです。
2 speedtestのインストール
rootとしてLinuxサーバーにログインし、次のコマンドを実行します:
# pip install speedtest-cli問題がある場合は、https://www.howtoforge.com/tutorial/check-internet-speed-with-speedtest-cli-on-ubuntu/ および https://pypi.python.org/pypi/speedtest-cli を参照してください。
注:私のインストールではspeedtestとspeedtest-cliは同一なので、以下ではspeedtestを参照します。
3 SQLite3のインストール
# apt-get install sqlite3apt-getが適用できない場合は、あなたのディストリビューションに相当するものを使用してください。
4 bandwidth.shの作成
次のbashスクリプトコードをファイルに入力し、/usr/local/etc/bandwidth.shとして保存します - これは後であなたに特化させるために少し編集します。
#!/bin/bash
# 3つのサーバーに対してspeedtestを実行し、すべての出力結果をCSVファイルに保存してsqlite dbにインポートする
#
# cronjobによって1時間ごとに実行される
#
#
function getCSVString () {
# speedtestが失敗した場合(例:サーバーにアクセスできなかった場合)、この時間スロットのためにダミーのゼロエントリを作成する必要があります
# speedtestが生成するのと同じ形式のタイムスタンプ文字列を取得する - UTC時間が必要です
local RIGHTNOW=$(date --utc +%Y-%m-%dT%H:%M:%SZ)
# どのサーバーに対してテストしていますか?
if [ $1 = "5443" ]
then
echo "5443,Fasthosts Internet,Gloucester,$RIGHTNOW,73.09,0.0,0.0,0.0"
fi
if [ $1 = "1234" ]
then
echo "1234,Uno,Milton Keynes,$RIGHTNOW,168.27,0.0,0.0,0.0"
fi
if [ $1 = "1783" ]
then
echo "1783,Comcast,\"San Francisco, CA\",$RIGHTNOW,8420.0,0.0,0.0,0.0"
fi
# テスト/デバッグケースのみ
if [ $1 = "199999999" ]
then
echo "99999,Test,Test,$RIGHTNOW,99.99,0.0,0.0,0.0"
fi
}
function runTest () {
# csv出力をtmpファイルに保存して、指定されたサーバーに対してspeedtestを実行する
/usr/local/bin/speedtest --csv --server $1 > /usr/local/etc/speedtest.tmp
if [ $? -gt 0 ]
then
# speedtestが失敗したので、エラーメッセージの代わりにゼロエントリを作成する
getCSVString $1 > /usr/local/etc/speedtest.tmp
fi
# 次のサーバーテストの準備として出力を保存する
cat /usr/local/etc/speedtest.tmp >> /usr/local/etc/speedtest.csv
}
# メイン
#######
# 3つのサーバーに対してspeedtestを実行し、すべての出力結果をcsvファイルに保存する
cd /usr/local/etc
# csvファイルをクリアする - 実行開始時に空である必要があります
rm -f /usr/local/etc/speedtest.csv
############################################
# テスト/デバッグケース - speedtestを失敗させる
############################################
# runTest "199999999"
# sleep 5
####### テスト後にコメントアウト ##########
############################################
runTest "5443"
sleep 10
runTest "1234"
sleep 10
runTest "1783"
sleep 1
# これでcsvデータをsqlite dbにインポートします
sqlite3 -batch /usr/local/etc/bandwidth.db <<"EOF"
.separator ","
.import /usr/local/etc/speedtest.csv bandwidth
EOF
# 現在の実行csvをバックアップに追加
cat /usr/local/etc/speedtest.csv >> /usr/local/etc/speedtest.bak
ファイルプロパティを設定して、このスクリプトを実行可能にします:
# chmod 0700 bandwidth.sh5 SQLiteデータベースの作成
/usr/local/etcにbandwidth.db SQLiteデータベースを作成します:
#sqlite3 bandwidth.db次に、sqlite>プロンプトで次のコマンドを使用して新しいテーブルを作成します(最後のセミコロンを見逃さないでください):
sqlite> CREATE TABLE IF NOT EXISTS "bandwidth" ("serverid" INTEGER NOT NULL , "sponsor" VARCHAR NOT NULL , "servername" VARCHAR NOT NULL , "times" DATETIME PRIMARY KEY NOT NULL UNIQUE , "distance" FLOAT NOT NULL , "ping" FLOAT NOT NULL , "download" FLOAT NOT NULL , "upload" FLOAT NOT NULL );sqlite> .quitこれにより、speedtestのCSV形式出力に直接マッピングされるフィールドを持つbandwidthという名前のテーブルが作成されます。
6 サーバーのリストを取得
speedtestが使用するサーバーのリストが必要です。
# speedtest --list > servers.txt次に、servers.txtを確認して、テストを実行するサーバーの数値IDを見つけます。
# nano servers.txtファイルは次のようになります:
Retrieving speedtest.net configuration...
5833) Hub Network Services Ltd (Newport, Wales) [57.50 km]
5938) Spectrum Internet (Cardiff, Great Britain) [65.89 km]
5443) Fasthosts Internet (Gloucester, Great Britain) [74.31 km]
6504) Secure Web Services Ltd (Shrewsbury, Great Britain) [78.64 km]
7265) Unitron Systems & Development Ltd (Telford, Great Britain) [87.11 km]
8225) Exascale Limited (Wolverhampton, Great Britain) [96.08 km]
3110) zero.net.uk Ltd (Studley, Great Britain) [96.12 km]
12401) Dragon WiFi LTD (Haverfordwest, United Kingdom) [120.78 km]
1153) Warwicknet Ltd. (Coventry, Great Britain) [125.18 km]
1685) Vodafone UK (Newbury, Great Britain) [153.25 km]
4384) Iomart (Leicester, Great Britain) [157.40 km]
1234) Uno (Milton Keynes, Great Britain) [170.71 km]
3504) TNP Ltd. (Manchester, Great Britain) [170.93 km]
11747) Vispa (Manchester, United Kingdom) [170.93 km]
サーバーIDは左側にあります。各行の最後の数字は、speedtestがあなたの場所とサーバーの距離をキロメートル単位で推定したものですが、あまり正確ではないかもしれず、実行ごとに変わる可能性があります。テストサーバーは、この距離に基づいて近い順にリストされます。このリストの上部に近いサーバーに対してテストすることで、理論的には最も迅速なpingと最良のダウンロードおよびアップロード速度が得られるはずです。
7 サーバーIDを選択し、bandwidth.shを編集
ここで、さまざまなサーバーIDに対して手動でspeedtestを実行し、どのような結果が得られるかを確認する時です。私は、イギリスの近くにあるいくつかのサーバーと比較用にカリフォルニアのサーバーを選びました。使用するコマンドの形式は次のとおりです:
# speedtest --server 1234表示される出力は次のようになります:
Retrieving speedtest.net configuration...
Testing from xxxxxxx (n.n.n.n)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Uno (Milton Keynes) [187.87 km]: 33.243 ms
Testing download speed................................................................................
Download: 1.60 Mbit/s
Testing upload speed...............................................................................................
Upload: 0.55 Mbit/s
使用したいサーバーを選択したら、数値サーバーIDをbandwidth.shの関連行に入力します。
runTest "5443"
sleep 10
runTest "1234"
sleep 10
runTest "1783"
sleep 1また、speedtestが特定の実行で失敗した場合にダミーエントリを作成するエラー処理のコードを調整する必要があります。
# どのサーバーに対してテストしていますか?
if [ $1 = "5443" ]
then
echo "5443,Fasthosts Internet,Gloucester,$RIGHTNOW,73.09,0.0,0.0,0.0"
fi
if [ $1 = "1234" ]
then
echo "1234,Uno,Milton Keynes,$RIGHTNOW,168.27,0.0,0.0,0.0"
fi
if [ $1 = "1783" ]
then
echo "1783,Comcast,\"San Francisco, CA\",$RIGHTNOW,8420.0,0.0,0.0,0.0"
fi$RIGHTNOWの後の数字(例:73.09)は、あなたの場所から対象サーバーまでの距離をキロメートル単位で示しています。これらはどこでも使用しないので、プレースホルダーとして任意の数値を使用できます。
1783の例では、場所にカンマが含まれているため、引用符を付けてエスケープする必要があります。エスケープされた引用符がないと、カンマはCSVフィールド区切り記号として扱われ、SQLiteインポートに問題を引き起こします。選択したサーバーに同様のカンマを含む場所テキストがある場合は、エスケープされた引用符を使用する必要があります。
8 cronjobの設定
1時間ごと(または合理的な範囲内で希望する頻度)に/usr/local/etc/bandwidth.shを実行するcronjobを設定します。ISPConfigを実行している場合は、これを使用してcronjobをスケジュールできます。

または、Linuxコマンドラインで次のように入力できます:
# crontab -e次のようなものが表示されるはずです(’root’としてログインしていることを忘れないでください):
* * * * * /usr/local/ispconfig/server/server.sh 2>&1 | while read line; do echo `/bin/date` "$line" >> /var/log/ispconfig/cron.log; done
* * * * * /usr/local/ispconfig/server/cron.sh 2>&1 | while read line; do echo `/bin/date` "$line" >> /var/log/ispconfig/cron.log; done
1 * * * * /usr/local/etc/bandwidth.sh 2>&1ISPConfigを実行していない場合、最初は空である可能性があります。上記のように正確に最後の行を追加します - スペースが重要です - 00:01 AMにシェルスクリプトを実行し、その後毎時繰り返すようにします。もちろん、異なる時間を選択できます。(最初にこれを実行すると、crontabは使用するエディタを尋ねてきます - 私はnanoを選択します。)
9 PHP open_basedirの設定
ウェブサイトのPHP open_basedirエントリに/usr/local/etcを追加します。ISPConfigでは、これはウェブサイトのオプションタブにあります。

これにより、私たちが作成したSQLiteデータベースにbandwidth.phpコードがアクセスできるようになります。
もし、/var/www/clients/client1/web1/web/のようなすでにアクセス可能なディレクトリにデータベースを作成することに決めた場合は、これをスキップすることができましたが、セキュリティの観点からは良い選択ではありません。
10 bandwidth.phpの作成
このコードをサーバーの基本ウェブドキュメントディレクトリにあるbandwidth.phpという名前のファイルにコピーする必要があります。ISPConfigを使用している場合、これは/var/www/clients/client1/web1/web/のようなものになります。
帯域幅モニター - 過去24時間のダウンロード速度
ダウンロード速度 - 過去24時間
このファイルを編集して、報告したいサーバーIDを使用します。私の例では、サーバー1234を使用しています。数日間のデータを調査した結果、このサーバーが私が得ている速度に最も近いMbps数値を生成していることがわかりました。サーバーIDはSQL SELECT文のWHERE句にあります:
SELECT serverid, strftime("%H:%M", times) || " " || strftime("%d/%m/%Y", times) AS timestamp, sponsor, servername, download
FROM bandwidth
WHERE serverid = 1234
ORDER BY times
LIMIT 24 OFFSET (SELECT COUNT(*)/3 FROM bandwidth)-24;このSQL文は正確に何をしているのでしょうか?SQLに不慣れな場合は、各部分を見てみましょう。
a. SELECTはSQLデータベーステーブルからレコードを読み取るためのコマンドで、読み取るフィールドやその他のオプションが続きます。
b. strftime(“%H:%M”, times) || “ “ || strftime(“%d/%m/%Y”, times) AS timestamp
は、speedtestがCSV出力で生成した日時文字列を、もう少しユーザーフレンドリーな形式に再フォーマットします。私はUK形式の日付が欲しいので、”2017-08-31T12:02:51.898186Z”のような文字列を”12:02 31/08/2017”に変換します。この再フォーマットを後で処理するよりも、SQL文内で直接行う方が簡単です。ここでの時間はUTC/GMTになるので、私には問題ありませんが、変更したい場合もあるかもしれません。例えば、米国形式の日付が欲しい場合は、2番目の部分をstrftime(“%m/%d/%Y”, times)に変更します。
c. serverid, timestamp, sponsor, servername, downloadは、SQLテーブルから読み取ってJSONオブジェクトを作成したいフィールドです。
d. FROM bandwidthは、読み取るSQLテーブルの名前です。
e. WHERE serverid = 1234は、読み取るテーブルのサブセットを設定します - これを使用したサーバーIDに合わせて変更してください。また、複数のサーバーのデータを読み取ることもできますが、チャートが複雑になります。
f. ORDER BY timesは出力のソート順を設定します - speedtestが各実行のために設定したタイムスタンプでソートされるようにします。
g. LIMIT 24は出力を24レコードに制限します。過去24時間分のデータを表示したいので、cronjobが1時間ごとに実行されるため、これが必要です。もし1時間に2回実行している場合は、24時間分のデータを取得するために48に設定する必要があります。
h. OFFSET (SELECT COUNT()/3 FROM bandwidth)-24;は、最も最近のエントリに興味があるため、テーブルから最後の24レコードを取得する必要があります。これを指定するために、LIMITに合わせてOFFSETを指定する必要があります。これがないと、常にテーブルの最初の24レコードを取得することになります。正しいオフセットを取得するために、テーブル内のすべてのレコードをカウントし、(SELECT COUNT())でこれを行い、3で割ります(1時間ごとに3回speedtestを実行しているため)そして、これから24を引いて正しいOFFSET位置を取得し、LIMIT 24が取得したいレコードを取得できるようにします。
bashスクリプトを変更して、1つのサーバーテスト以外の何かを実行するようにした場合は、その/3部分を適宜調整してください。1つのサーバーに対してのみテストしている場合は、割り算は必要ありません。
チャートの全体的なサイズを調整したい場合は、私の画面に適したサイズをハードコーディングした簡単な方法を使用しています - これは次の行で設定されています:
11 ファイルのローカルコピーを取得
私は、必要なCSSおよびJSライブラリファイルのローカルバージョンを持つことを好みます(Googleフォントは除く)ので、あなたも同じであれば、Chart.bundle.min.jsのコピーをサーバーに取得し、/var/www/clients/client1/web1/web/scriptsディレクトリに配置する必要があります(または、あなたにとって正しい基本ディレクトリに)。
ファイルは次のURLからダウンロードできます:https://cdnjs.cloudflare.com/ajax/libs/Chartajs/2.6.0/Chart.bundle.min.js
ローカルコピーを使用したくない場合は、bandwidth.phpを編集して、代わりに公開CDNバージョンを指すようにします。この行を変更するだけです:
を次のように変更します:
12 ISPConfigでPHPを有効にする
ウェブサイトの設定でPHPを有効にするのを忘れないでください。これがまだ設定されていない場合。

13 ブラウザでbandwidth.phpを読み込む
ついに完了しました。bandwidth.shシェルスクリプトがデータを生成するために数回実行される時間があったら(または最初に手動で数回実行することもできます)、ブラウザをLinuxサーバーのウェブサイトに向け、bandwidth.phpを読み込むと、次のようなものが表示されるはずです:

そして、はい、私のブロードバンドは本当にそれほど悪いのです!
最後に、カバーする価値のあるいくつかの追加ポイントがあります:
14 棒グラフ出力
SQLテーブルに保存されているダウンロードおよびアップロードの数値は、Mbpsではなくbps(および驚くほど多くの小数点以下の桁数 - 1533681.5922415722のような数字)です。これは、speedtestがCSVモードで実行されるときにデータを生成する方法です。y軸の棒グラフ出力でbpsではなくMbps数値を表示するために、bandwidth.phpのJavaScriptコードにいくつかの行が含まれています:
mbps = Math.round(bandwidth_data[i].download/1000).toFixed(3)/1000;
bvalue = mbps.toLocaleString(undefined, { minimumFractionDigits: 3 });toLocaleStringを使用すると、ブラウザのロケール設定によって設定された正しい小数点区切り記号(”.”または”,”)が挿入されるはずですが、これは実装依存であり、やや不一致です。もし、”.”の代わりに”,”が表示されて気になる場合は、Globalizeを使用してこれを修正する方法があります。以下の「18 さらなるステップとアイデア」を参照してください。
デフォルトのホバーコードの末尾のゼロの処理をオーバーライドするために、いくつかの行が必要です。chart.jsは通常、”2.000”を単に”2”として表示しますが、これは私が望むものではありません。特に、最初にゼロを確実に表示するために手間をかけた後は:
// デフォルトのツールチップをオーバーライドし、末尾のゼロを削除しないようにする
tooltips: {
callbacks: {
label: function(tooltipItem, data) {
var value = data.datasets[0].data[tooltipItem.index];
var label = 'download: ';
var retvalue = value.toLocaleString(undefined, { minimumFractionDigits: 3 });
return label + ' ' + retvalue + ' Mbps';
}
}
},これは、chart.jsの動作を「掘り下げて」変更する良い例です。
また、x軸にすべてのバーのタイムスタンプを表示するようにチャートオプションを設定しました:
xAxes: [{
ticks: {
autoSkip: false,
maxTicksLimit: 24
}
}],デフォルトのオプション(autoSkipがtrueに設定されている)は、ラベルに奇妙なギャップを生じさせました。24エントリ以外の何かを表示したい場合は、maxTicksLimitを変更する必要があります。
chart.jsのオプションを変更するのにもっと助けが必要な場合や、望むものが機能しない場合は、特定のchart.js Stack Overflowページをチェックしてください。そこには多くの有用な情報があります - https://stackoverflow.com/questions/tagged/chart.js - 検索ボックスを使用して探しているものを絞り込んでください。残念ながら、chart.jsのドキュメントには、確実に役立つ高度な例が不足しています。
15 エラーハンドリング
初期のテスト実行中に、speedtestがCSVファイルに「speedtestサーバーリストを取得できません」と報告することが何度かありました。これは、私のブロードバンド接続が非常に悪く、speedtestがテストサーバーに接続できなかった時を反映していると思われます。このテキストは明らかにSQLiteデータベースにインポートする形式ではないため、これをCSVファイルから削除し、特定の時間スロットのためにゼロエントリをデータベースに含める解決策が必要でした。そうしないと、SQLテーブルに欠落エントリがあると、単に見えなくなり、チャートを作成する際に24エントリの整列が崩れてしまいます。
bandwidth.shでは、スクリプト変数$?を使用してspeedtestが設定した終了コードをテストし、0より大きい場合はspeedtestが失敗したことを示します。これにより、ダミーCSVエントリを作成する関数がトリガーされ、実行のためにCSVファイルを上書きするために使用されます。
スクリプトの中にコメントアウトされた行があり、これを実行すると、ダミーゼロエントリを生成するエラールーチンをテストします。
############################################
# テスト/デバッグケース - speedtestを失敗させる
############################################
# runTest "199999999"
# sleep 5
####### テスト後にコメントアウト ##########
############################################これは、speedtestが好まない「ナンセンス」サーバーIDを使用して、非ゼロの終了コードを返すようにします。スクリプトは、その実行のためにCSVファイルにダミーエントリを作成するはずです。
最悪の事態が発生した場合、/usr/local/etc/speedtest.bakにバックアップCSVファイルが保持されており、これはスクリプトの最初の実行以降のすべてのCSV出力を含むはずです。これを編集して不要なエントリを削除し、SQLテーブルをクリアし、すべてのCSVエントリをSQLiteに再インポートすることができます。
16 タイムゾーン
SpeedtestはUTCで時間を報告します(基本的にこれはグリニッジ標準時またはGMTと同じです)。UTCを使用することで、SQLテーブルに保存されるすべての時間が一貫性を持ち、夏時間の影響を受けることはありません。
しかし、これはbandwidth.shのエラーハンドリングルーチンがダミーエントリのタイムスタンプを反映する必要があることを意味します。これは非常に簡単です - –utcフラグを含めるだけです:
local RIGHTNOW=$(date --utc +%Y-%m-%dT%H:%M:%SZ)グラフのx軸ラベルをUTC/GMT以外の何かとして表示したい場合は、その変更をSQL SELECT文で行うのが最適です。例えば:
strftime("%H:%M", time(times, 'localtime')) || " " || strftime("%d/%m/%Y", times) AS timestampこれにより、Linuxサーバーのタイムゾーン設定を使用して、チャートに表示される時間が調整されます。あるいは、フロントエンドでGlobalizeがこれを行う方法を探ることもできます。
詳細については、https://www.timeanddate.com/time/gmt-utc-time.html および http://www.tutorialspoint.com/sqlite/sqlite_date_time.htm を参照してください。
17 さらなるステップとアイデア
Speedtestは生データのソースである必要はありません - どこからでも、何にでも、インターネット速度だけでなく、データを取得できます。原則は同じです - 生データを有用な形式で取得できるバックエンドサーバープロセスがあり、bashスクリプトからSQLiteにインポートし、必要なデータのサブセットを抽出してチャート化するフロントエンドがあります。
より複雑なbashスクリプトは、CSV形式がオプションでない場合、SQLテーブルに直接データを書き込むことができます(SQL INSERTコマンドを使用)。SQLテーブルを設計する際には、後でデータをどのように抽出したいかを考慮してください。
変更を加える際には、編集しているコードのコンテキストを考慮してください。つまり、PHPスクリプト内のSQL文がHTML内のJavaScript内にあることを覚えておいてください。自分がどのレベルにいるかを覚えて、適切にコードを書くことができます。これを見失うと、JavaScript内でPHPコードを書くことになり、これは機能しないことを保証します。
さらなる探求のためのいくつかのアイデア:
- toLocaleStringはブラウザ間で一貫して実装されていません。Globalizeを使用して、すべての数値、日付、タイムゾーン形式を処理します。
- httpstat(bashスクリプト版があります)をチェックして、さまざまなタイプのインターネット接続データを収集します。これを(別の)SQLテーブルに保存し、出力をグラフ化します。
- bandwidth.phpフロントエンドを改善して、ユーザーに異なるオプションを選択させます:24、48、72時間;特定の日付を選択する、アップロードおよびダウンロードデータ、ping時間を含める。
- HTMLをレスポンシブBootstrapコードを使用するように変換し、さまざまなデバイスや画面サイズでうまく動作するようにします。
- chart.jsの他のオプションを探ります。たとえば、線と棒の組み合わせチャート、色やバーのサイズを変更します。
- SQLiteをMySQLに置き換え、PHPからのユーザー/パスワードによる読み取りアクセスを追加して、より多くのセキュリティを提供します。
- node.jsを使用して、同様のシステムを構築します。
18 リンク
- speedtest: https://github.com/sivel/speedtest-cli
- SQLite3: https://sqlite.org/
- chart.js: http://www.chartjs.org/
- Globalize: https://github.com/globalizejs/globalize
- httpstat: https://github.com/b4b4r07/httpstat
- Bootstrap: http://getbootstrap.com/
- PHP: http://www.php.net/
- ISPConfig: http://www.ispconfig.org/
- Debian: http://www.debian.org/
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。