【PHP】外部サーバーディレクトリ内にあるファイルの一覧を取得する

PHP の readdir 関数はローカルネットワーク内のフォルダにしかアクセスできない。

外部サーバーにあるディレクトリ内ファイルの一覧を取得するには、fopen 関数を使用するといい。

------------------------------------------------
//urlをひらく。ブラウザでフォルダにアクセスした際、
//フォルダ一覧が見られるApacheの機能を利用。
$fp = @fopen(フォルダのパス, 'r');

while ( !feof($fp) ) {

$row = fgets($fp, 1024);

//ファイル名抽出処理。

}
fclose($fp);
------------------------------------------------

ただし、↑だとブラウザからのフォルダ一覧の表示も許可しなければいけないので、セキュリティ的にはよくない。

fopen は、FTP をサポートしているので ftpサーバーに対してなら ftp_nlist() で取得することも可能か?後日検証。

検索されるファイルが置かれているサーバーにファイルを一覧出力するプログラム(phpファイル)を置いて、その結果を受け取りサーバーで取得する方法もある。その場合、ファイル一覧を取得したいフォルダが複数あって実行のつどフォルダを指定したい場合、フォルダの数だけプログラムが必要か?

参考ページ

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113905041

uwscで秀丸エディタを起動してマクロを実行

uwscで秀丸エディタを起動するにはコマンドプロンプトを利用する。

//秀丸エディタを起動
-------------------------------------
CMD = "C:\Program Files\Hidemaru\Hidemaru.exe"
DOSCMD(CMD) //実行
-------------------------------------

//ファイルを指定して秀丸エディタを起動
-------------------------------------
CMD = "<#DBL>C:\Program Files\Hidemaru\Hidemaru.exe<#DBL> <#DBL>C:\フルパス\目的のファイル.html<#DBL>"
DOSCMD(CMD) //実行
-------------------------------------
※パスのProgram Filesに半角スペースがあるので、パス全体を<#DBL>でかこう

//ファイルを指定してマクロを実行
-------------------------------------
CMD = "<#DBL>C:\Program Files\Hidemaru\Hidemaru.exe<#DBL> /xマクロ名.mac <#DBL>C:\フルパス\目的のファイル.html<#DBL>"
DOSCMD(CMD,true) //実行。trueがないとファイルを閉じるまで次の命令が実行されない
-------------------------------------
※マクロは オプション /xマクロ名 で指定

マクロを実行した後の処理

マクロ終了のダイアログを閉じる
-------------------------------------
//#32770はダイアログ。-1は無限待ち
id = GETID("秀丸エディタ", "#32770", -1)
SLEEP(1)
CLKITEM(id, "OK", CLK_BTN)
-------------------------------------

上書き保存と閉じる
-------------------------------------
// ショートカットキーの実行
hide_id = GETID("目的のファイル.html", "Hidemaru32Class", -1)
SCKEY(hide_id, VK_CTRL, VK_S) //保存
//CLKITEM(hide_id, "上書き保存 Ctrl+S", CLK_ACC) //もしくはこれ
SLEEP(1)
CTRLWIN(hide_id, CLOSE) //閉じる
-------------------------------------

【windows7】uwscでzipファイルを回答&圧縮

uwscでzipファイルの解凍や圧縮をしたい場合はpowershellを使うのが便利。

zipファイルを扱えるpowershellはv5以降。windows7ではバージョンアップが必要。

powershellのバージョン確認コマンド
------------------
$PSVersionTable
------------------

また、windows7でpowershell v5をインストールするには .NET Framework Ver.4.5以降が必要

windows7で .NET Framework のバージョンを確認する方法

http://www.atmarkit.co.jp/ait/articles/0910/15/news116.html

解凍コマンド
------------------------------------
Expand-Archive 解凍したいファイル.zip 解凍後のフォルダ名
------------------------------------

圧縮コマンド
------------------------------------
Compress-Archive 圧縮したいフォルダ 圧縮後のフォルダ名.zip
------------------------------------

なのでuwscでのコマンドは

解凍
------------------------------------
PS = "Expand-Archive 解凍したいファイル.zip 解凍後のフォルダ名"
POWERSHELL(PS) //実行
------------------------------------

圧縮
------------------------------------
PS = "compress-archive 圧縮したいフォルダ 圧縮後のフォルダ名"
POWERSHELL(PS) //実行
------------------------------------

もしくはUWSCからコマンドプロンプトを動かして

解凍
------------------------------------
CMD = "powershell Expand-Archive 解凍したいファイル.zip 解凍後のフォルダ名"
DOSCMD(CMD) //実行
------------------------------------

圧縮
------------------------------------
CMD = "powershell compress-archive 圧縮したいフォルダ 圧縮後のフォルダ名"
DOSCMD(CMD) //実行
------------------------------------

epubをルビありのテキストにする

calibreを使ってepubをテキストにすると「漢字かんじ」のように漢字とルビがつながる。「漢字(かんじ)」のようにルビを括弧でかこいたいのでcalibreで変換前にひと手間加える。

1.epubをzip形式に変換して、本文が書かれたhtmlファイルを取り出す。

2.htmlファイルを秀丸マクロで変換。

--------------------------------
//隣り合うルビを結合する
replaceallfast"<ruby>([^<]*?)<rt>([^<]*?)<¥/rt><¥/ruby><ruby>([^<]*?)<rt>","<ruby>¥¥1¥¥3<rt>¥¥2",regular;

//隣り合うルビタグがなくなるまで置換
while (result != 0) {

replaceallfast"<ruby>([^<]*?)<rt>([^<]*?)<¥/rt><¥/ruby><ruby>([^<]*?)<rt>","<ruby>¥¥1¥¥3<rt>¥¥2",regular;

//#a = result;
//$a = str(#a);
//message $a;

}

//ルビを括弧でかこう
replaceallfast"<rt>","(";
replaceallfast"</rt>",")";

//不要なrubyタグを削除
replaceallfast"<ruby>","";
replaceallfast"</ruby>","";
message "終了";
--------------------------------

3.変換後のhtmlファイルをzipの中に戻し、epub形式に戻す。そのepubをcalibreでテキスト変換する。

CentOS自宅サーバーにpoderosaやffftpから接続するときの確認事項

外部ネットワークからCentOSの自宅サーバーにアクセスするときの確認事項の覚書

poderosaやffftp共通

・ポートが開いているか
サーバー側のルーターにアクセスしてポートが開いているか調べる。
poderosa(SSH)は22番
ffftpは20~21番

・必要なサーバーソフトは立ち上がっているか
poderosa(SSH)httpd(Apache)が起動しているか確認
ffftpはsftpdが起動しているか確認

・iptablesが接続の邪魔をしていないか
iptablesの設定を確認。もしくは起動を終了させる。iptablesの設定例

なお、初期設定ではrootを使ってffftpでログインできない
詳細

ffftpで接続はできるのにサーバー側のファイル一覧が表示されない場合は、サーバー側でPASVモードの接続が許可されてない可能性が高い。「設定変更」-「拡張」タブ-「PASVモード」のチェックをはずす。もしくはサーバー側の設定を変更してPASVモードでの接続を許可する。

参考ページ

自宅サーバーに外部ネットワークからアクセスする設定

自宅に立てたCentOSサーバーに外部ネットワークからグローバルIPアドレスを指定してアクセスするときの確認事項

前提
・自宅サーバーのCentOSからインターネットつなげることができる
・同一ネットワークに他のPCがある(同じルーターに繋がっている)場合、そのPCからCentOSサーバーにアクセスできる

確認事項
・apache(httpd)を起動していること
・iptables(ファイヤーウォール)を停止していること、もしくはきちんと設定されていること
・二重ルーターになっていないこと(確認方法はこちら

・CentOSサーバーとその他の同じLAN内にあるPCが同じグローバルIPアドレスを共有する場合(プロバイダ契約がひとつの場合)は、CentOSサーバーのプライベートIPアドレスを固定する
固定の仕方参考ページ

プライベートIPアドレスを固定するときは他の機器と重複しないように注意。ルーターにアクセスし、DHCPで自動割り当てされる範囲のIPアドレスを確認し、範囲外のIPアドレスを指定すること。

・ルーターからポートの開放を行い、外部ネットワークからアクセスできるようにする。このとき自宅サーバーのプライベートIPアドレスを指定する。

WHR-HP-GNルーターの場合は設定はこちら

CentOS6.7のGUI画面が乱れてインストールできない

CentOS6.7をUEFIモードのRAID1でインストールしたときの覚書

インストールするとGUI画面で画面が乱れてインストールができない。

画面が乱れる理由はマザーボード(グラフィックボード)との相性が悪いのが理由のよう。

PCの構成
-----------------------------------
・H170-PRO(マザーボード、バージョン0906 2016/02/26更新 適用済み)
・Core i3-6100T(CPU)
・バッファローの白ディスプレイ(VGAケーブル) → acer黒ディスプレイ(DVIケーブル)(ディスプレイを変更してもダメ)
-----------------------------------

3TBのHDDを使ってRAID1を組んでインストールしたいので、UEFI起動でGUIでインストールする必要がある。

※非UEFI起動だと、画像の乱れはないが2TBより多いHDDを認識しない。また「GPTブートディスクを非EFI環境のシステムでお使いです」というエラーが出てインストールができても起動ができない。

こちらを参考

※CUI(テキスモード)でのインストールだとカスタムレイアウトによるパーティションのカスタムレイアウトができないのでインストール時にRAID1が組めない。
RAIDでなくていいからテキストモードでのインストールしたい場合はこちらのページを参考に、インストール最初の画面でリンク先のページで"single"としているところを"text"に変えて進めればいい。

古いバージョンのCentOSをいろいろ試してみると、CentOS6.5だと問題なくインストールできた(6.3、6.4、6.6はダメだった)。CentOS7でもUEFIモードのインストールは問題なし。

古いバージョンのCentOSダウンロードはこちらから

ただし、CentOS6.5で無事にインストールを完了しても「yum -y update」でCentOS6.7にアップデートしてしまうと再び画面がバグる。

解決方法
CentOS6.7をインストールしたいときは、一旦CentOS6.5のブートメニューで「Install system with basic video driver(基本的なビデオドライバーでシステムをインストール)」を選択して、インストールする

参考ページ

そのあとでCentOS6.7にアップデートしても画面は乱れない

パーティションの構成はこのようにした

IMG_9894

RAID1構成の参考ページ

ブート領域の設定は「カスタムレイアウトを作成する」を選択したあと、「作成」-「標準パーティション」から次のように設定する。

一つ目のHDD
--------------------------------------
「マウントポイント」 → 「/boot/efi
「ファイルシステムタイプ」 → 「EFI System Partition」
「使用可能ドライブ」 → 「sda」にチェック
「サイズ」 → 「300」
--------------------------------------

上と同じサイズのパーティションの二つ目のHDDにも設定
--------------------------------------
「マウントポイント」 → 「(空欄)
「ファイルシステムタイプ」 → 「EFI System Partition」
「使用可能ドライブ」 → 「sdb」にチェック
「サイズ」 → 「300」
--------------------------------------

構成の順番も大事で、写真と順番が違うとCentOSが起動しなかった。おそらく一番最初にEFI Filesystemのブート領域を持ってくるといい。

UEFIのブート領域はRAIDにできないようなので、二つ目のHDDにはマウントポイントなしでEFI Filesystemの領域を同サイズ確保した。インストール後、sda1の内容をsdb1にコピーすればいいらしい。(こちらの方が言ってるまま)

あとは初期値をいじらずにインストールを終えればインストール完了となる。

インストールできたらすべてのパッケージをアップデートしておく。

yum -y update ※-yはすべてイエスで答える

CentOS6のインストールで「GPTブートディスクを非EFI環境のシステムでお使いです」

3TBのHDDを二つ用意してCentOS6.7にRAID1構成でインストールを試みた。

こちらのページを参考にパーティションを構成してインストール作業を進めていくと警告表示される。

-----------------------------------
警告:
GPTブートディスクを非EFI環境のシステムでお使いです。おそらく、これはBIOSがGPTディスクからの起動をサポートしていないため動かないでしょう。
-----------------------------------

GPTブートディスクとは、2TBより容量の多いHDDのことらしく、これまでのBIOSでは扱えないディスクサイズを指すらしい。警告を対して気にも留めずインストール作業を最後まで終え、PCを再起動するとBIOS(UEFI)画面が表示されるだけでCentOSは起動しない。

これの解決策は、DVDドライブにCentOSのインストールディスクを入れてPCをリブート。BIOS画面に入ってブートメニューから「UEFI: DVDドライブ名」を選択してUEFIモードでインストール工程を処理していけばいい。

Sccure boot violationでCentOSがインストールできない時の対処法

新しく購入したPCにCentOS6.7をインストールする際、Sccure boot violationというエラーが出た。

エラーメッセージ
-----------------------------------
The system found unauthorized changes on the firmware, operating system or UEFI drivers.

Press [OK] to run the next boot device, or enter directory to BIOS Setup if there are no other boot devices installed. Go to BIOS Setup > Advanced > Boot and change the current boot device into other secured boot devices.
-----------------------------------

google翻訳
-----------------------------------
システムは、ファームウェア、オペレーティングシステムまたはUEFIドライバに不正な変更を発見しました。

[OK]を押すと次のブートデバイスを実行、またはインストールされない他のブートデバイスがない場合は、BIOSセットアップにディレクトリを入力します。 BIOSセットアップ>詳細設定>ブートに移動し、他のセキュアなブートデバイスに現在のブートデバイスを変更。
-----------------------------------

Sccure bootはPC起動時にOSのデジタル署名をチェックする機能らしく、デジタル署名のないOSは、起動できないらしい。

•Linux OSの場合、ほとんどがSccure bootに対応していないため、エラーが出る模様。

解決策としては、Sccure bootをUEFIで無効にすればいい。

BIOS(UEFI)を起動して「Advanced Mode」 → 「Boot」→ 「Secure Boot」の項目をクリック。「OS Type」のところを「Windows UEFI mode」→「Other OS」に変更すればいい。

【自作PC】ファンの回転数が異常

サーバー用に自作PCを組み立ててBIOSをチェックしたところ、ケース側ファンの回転数がおかしい。数百で回転数が少なすぎて赤字になったり、一万回以上の表示されたりを繰り返して安定しない。

構成
・P100(PCケース)
・H170-PRO(マザーボード)
・Core i3-6100T(CPU)

解決法
P100のファンについている回転数を制御するスイッチを L から H に変えるだけ。とりあえずこれで表示される回転数は異常でなくなった。低回転過ぎたのかな。