FTP サーバ構築

Webサーバーへのファイル転送用にFTPサーバーを構築してみました
使用したのは、前回作成したWeb サーバ構築 その2
をそのまま使っています
まず、FTPサーバー構築(vsftpd)
を参考にインストールします
vsftpd設定 ですが
私の場合、公開はしておらず、さらにDNSサーバも構築していないので
vsftpd設定 の最後の追記の部分を少し変更しています
use_localtime=YES ← タイムスタンプ時間を日本時間にする
ssl_enable=YES ← SSLの有効化
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem ← サーバー証明書を指定
だけを追記しています
また、いろいろと実験するために
anonymous_enable=NO ← anonymousユーザ(匿名ユーザ)のログイン禁止
は解除しました
その他、異なる点は
FTPサーバーへのアクセスを禁止するユーザの登録
を行っていないこと
そして、クライアントに使用するOSが Windows ではなく
uuntu でおこなっているぐらいです
Filezilla を ubuntu でインストールするには
Synaptic パッケージマネージャを使います
Filezilla での接続に関しては
WindowsからFTPサーバーへ接続(FileZilla)
と同じ要領で ubuntu からもできます
ただし、
ホスト⇒FTPサーバー名(例:ftp.centossrv.com)
サーバの種類⇒FTP over TLS(explicit encryption)
ログオンの種類⇒通常
ユーザ⇒ユーザー名
パスワード⇒パスワード
となっているのですが、私の場合 DNSサーバが構築されていないので
名前解決ができません
そのため、ホストのところには、構築したサーバのIPアドレスを記述します
匿名ユーザでログインするなら
ホスト⇒ 192.168.10.66
サーバの種類⇒FTP over TLS(explicit encryption)
ログオンの種類⇒匿名
ユーザ名でログインするなら
ホスト⇒192.168.10.66
サーバの種類⇒SFTP
ログオンの種類⇒パスワードを尋ねる
ユーザ⇒ wiki
というかんじです

文字列操作 その2

[e:69][e:69]文字列の置き換え
文字列の中の文字を置き換えするには、
str_replace();
を使います
構文は、
$変数 = str_replace(置換対象文字,置換文字,文字列);
となります
例えば、
$html =’おはよー
‘;
$search =’size="15"’;
$replace =’size="9"’;
$result=str_replace($search,$replace,$html);
とすると、
$html の中にある
$search にあたる内容を
$replace に置換する
という意味になります
ちなみに、今回 " ではなく ‘ で囲んでいるのは、
" で囲むと
文字列を囲む意味の" とPHPが間違えてエラーになるのを防ぐためです
もっとも、エラーにならないようにできるのですが、
この場合、"を無効化するたびに¥を記述するため、
面倒なので ‘ を使いました
もし"ならば
$html =’おはよー
‘;
となります
今回は短いのですが、長文でこれをやると間違いのもとになりやすいので
無難に’にしてます
---------------–
[e:69][e:69]スペースを除去するtrim();
フォームから送信されたdata(文字列)の前後にスペースがあると、大抵はエラーになります
よくログインするときにコビペすると
失敗しやすいアレですね
こんなときに、
trim();を使うと
前後の不要な文字を一度に削除可能です
構文は
$変数 = trim(文字列);
となります
これで、いらない空白を除外した文字列が格納されます
例えば、
$string =" 12345678910 "
$result=trim($string);
とすれば
空白を除いた
12345678910
が格納されます

文字列操作

[e:69][e:69]入力dataの処理
[e:69]文字列バイト数を得るには[e:69]
databaseを利用して
dataを格納するとき、格納するdataのバイト数をcheckすることがあります
この場合、strlen();をつかいます
使い方は、
strlen(); に大文字、または文字列を格納した変数を引数に指定するだけ
結果は変数で受け取れます
例えば
$変数 = strlen($文字列);
つまり
$文字列で引数を指定し、
$変数で結果を受け取るわけです
わかりやすい例をあげるなら、
$str ="こんにちわ";
$length = strlen($str);
$mb_length = mb_strlen($str);
この場合、
$length = $strlen($str);
なので12が格納されます
なぜ、6文字で12なのかというと、日本語は2バイト、英数字は1バイト
という扱いだから
ちなみに、日本語を何文字あるかを
カウントしたいなら、
mb_strlen();
をつかいます
なので、
$mb_length=mb_strlen($str);
には6が格納されるわけです
---------------–
[e:69][e:69]文字列の分割[e:69][e:69]
送信フォームから送られてきたdata(文字列)からある部分だけを分割するには
substr();を使います
構文は、
$変数 =substr(文字列,文字列の位置,文字列の長さ);
となります
例えば、
$string ="abcdefg";$result=substr($string,3,3);
とすると、
$result にはdef が格納されます
文字列や配列は、1からではなく0から数えるため、
a=0
b=1
c=2
という順番になります
なので、$substr($string,3,3);
とした場合は、
abcdefg の配列の4つめになる d から
3つ を取り出し格納します
もし、構文の最後の文字列の長さを指定しない場合、
例でいうと
$result=substr($string,3);
とすると、4番目から後がすべて格納されます
今回でいうなら
$result にはdefg が格納されます

為替レートの予測について

現在、サーバの勉強をしています
その中でも、PHPとMySQL を使って何か作ってみようと思っているのですが
あれば便利だな~と思うのが
為替の予測ソフトです
とはいっても、将来の予想とか、大きく勝つためのものではなく
デイトレードをするときに、予想をしやすくするためです
クロス円の値動きは、ドル円 x 対ドルで算出します
ただ、この計算をするのにリアルタイムの為替レートや、その日の
対ドルレートを使って、変動幅の計算や、どの程度までいきそうなのかを
予測できないかな?というコンセプトでつくってみようと思っています
参考になりそうなところは
phpによるスクレイピング処理入門

為替レート取得プログラム
などです
本日の値動きの要因は、ドル円が動かず対ドルレートの上昇によるものですね
為替 API などというように検索してみると、何か見つかるかもしれません

スーパーグローバル変数

PHPで使うスーパーグローバル変数は、すべて連想配列になります
[e:69]$GLOBALS
グローバル変数
[e:69]$_SESVER
サーバー変数
systemにより値が格納される
[e:69]_ENV
環境変数
systemにより値が格納される
[e:69]_COOKIE
HTTPクッキー
[e:69]_GET
HTTP GET変数
送信フォームからの値を受け取る
[e:69]_POST
HTTP POST 変数
送信フォームからの値を受け取る
[e:69]_FILES
HTTP ファイルアップロード関数
アップロードされたファイルや名称が格納される
[e:69]_REQUEST
リクエスト変数
[e:69]_SESSION
セッション変数
データを持ち回るための変数

変数の有効範囲

基本的にはPHPもCやJavaと同じく、
変数の有効範囲は、スコープ内、
つまり
{} の間になります
もし、関数の外側の変数を使うなら、
global を使います
つまり、$dataを使いたいなら、
global $data
とします
また、$GLOBALS を使うという手段もあります
さっきのように、
$data を使いたいなら
$GLOBALS[‘data’]というようにします

複数の値を返す list();

return では、複数の変数を返せないので、値を配列にまとめて返すようにします
構文としては、
----------------
list($変数1,$変数2,$変数3) = 関数();
処理1;
処理2;
function 関数()
{
処理3;
$変数 = 処理4;
return array($変数1,$変数2,$変数3);
}
---------------–
というように、
受け取り側でlist();で帰ってきた配列を、変数に代入して受け取ります
つまり、関数内で return にarray();を使って複数の値を配列にして返しているわけですね
こうすれば、複数の値を返すことができます
ここで、例として今日の日付を返すものを作ってみました
<?php
list($year,$month,$day)=get_today();
print $year.’年’ . $month.’月’.$day.’日’;
function get_today()
{
$year=date(‘Y’);
$month=date(‘m’);
$day=date(‘d’);
return array($year,$month,$day);
}
?>
---------------–
list();は、
配列を 同じ順番で複数の変数に代入できます
そして、array(};
は、変数や数値、文字列を , で指定することで配列を作れます

Web サーバ構築 その2

今回は、以前 書きましたWeb サーバ構築 その1
の続きになります
今回も 参考にしたサイトの続きをおこなっています
まず
Webサーバー間通信内容暗号化(Apache+mod_SSL)
をそのまま行いました
前回との違いは https で接続できるようになったことですね
次に
ユーザーディレクトリ作成(/~ユーザー名/)
でユーザディレクトリをつくります
ユーザ名はなんでもいいので、今回はwiki というユーザにしてみました
このため、このサイトで centos となっている部分をすべて wiki へ置き換えています
これにより、レンタルサーバの自分のスペースのようなものができるみたいですね
ちなみに私はレンタルサーバは実際には使ったことがないので、
間違っていたらすみません
ここまでできたら、次に
Webページパスワード制限(htpasswd)
を作成できます
というより
Webサーバー、Webサーバー間通信内容暗号化が導入済でないとこれはできないみたいです
この方法を導入することで、パスワード認証が必要なページをつくれます
秘密ページなどをつくるときに使えそうです
今回はまだここまでです
ポート開放できるほどのスキルはまだありませんので
まずはローカルで構築して、セキュリティの勉強をしていこうと
思っています
Webサーバー間通信内容圧縮(mod_deflate)
はポート開放できていないので、確認は行っていません
次は引き続き FTPサーバを構築予定です

Tittter の公式ナビ

最近、流行りの twitte について調べています
twinabi
というサイトでアカウントをカテゴリから探せます
なにから始めるか、迷っているという方は
ここから始めてみるのもいいかもしれませんね
それにしても、テクノロジーの進歩がすごいですね
ホームページからブログ、ブログからtwitter と
どんどん情報発信ができる時代へとなってきています
情報はアウトプットすると、より自分なりに理解できますので
まずはお手軽なtwitter などから情報発信してみるのもいいかもしれません

引数のデフォルト値 その

デフォルト値を複数指定する場合、デフォルト値を指定した引数の右側に
デフォルト値を指定しない引数があると、なぜかダメです
例:
function check_member($username="gest",$pass)
はエラーになりますが
function check_member($username,$pass="gest")
はなぜかOKになります
理由はわかりませんが、そういうものみたいです