Table of Contents

PDFにすると画面が一部崩れる[edit]

webページをPDFに変換すると画面が一部崩れてしまうことがよくある。下の例だと、元の画面の一番上にあったメニューが崩れて本文に被さっている。「……からメッセージが届きました」は画面上部のメニューに出るべき文字だ。(そもそもブラウザで見るとアイコン表示になっており文字は見えない。)

解決方法は色々あると思うが、僕は、ChromeのDevToolsを使って、邪魔な部分のノードを全部削除している。Delete Element。
devtool_delelmnt.png

文字化け[edit]

最近は余り見かけないので,却って,文字コードを強制的に切り替える機能(現在表示しているページの文字コードを,ヘッダー情報を無視して任意に選択する)がブラウザからなくなっているようだ。手元のChrome (Windows)とEdge (Windows)にはない。まだIE (Windows 10)では切り替え可能。2018年 3月

アクセス制限[edit]

自宅サーバーを立てるだけなら固定IPは不要で,ダイナミックDNSでもよい。しかし外部にあるサーバーの認証に自宅IPを使う場合は,ダイナミックIPだとちょっと不便だ。逆引きできないからである。(.htaccessに,ダイナミックDNSのホスト名を書いてもworkしない。Cf. HostnameLookups。ちなみに、Apache ver 2.4.19から逆引きできないホスト名(ダイナミックDNSなど)でアクセス制限できる。Require forward-dns記法。mod_authz_host - Apache HTTP Server Version 2.4

幾つかの対処策はあるが,一つ,ホスト名とクッキーを併用して認証するのは割と簡単だ。

まず,クッキーを発行するCGIを用意する。次に,アクセス制限したいディレクトリの.htaccessで条件を記述する。

アクセス監視(自動化)[edit]

直接どこからもリンクされていないページを見られていたことに偶然気付いた。アクセス制限(認証等)をする内容ではない。さて、ログを随時確認(監視)する、というようなことは自動化すべきなので、特定のディレクトリ(あるいはその他条件)に合致するアクセスがあったらメールで通知が来るように設定した。やりかたは色々あるだろうけど、対象ファイルに、それ自体を加工できないものも含まれているので、ファイル側を一切いじらなくても済む方法として、Apacheのパイプ経由のログ機能で外部プログラムを呼ぶことにした。

パイプ経由のログ機能はログを加工するために用意されたのだろうけど、今回の用途にも特に問題なく使える。本来のログへの影響はApacheの仕様を参照。

この例だと、通常のApacheログ一行分(combined書式)が$bodyに入る。command injectionに注意。

fail2ban[edit]

fail2banは定番で、Sakura VPSの標準セットでは設定済というくらいらしい。私はウェブ(http,https)に対して使っているが、難儀したのは、Apacheログファイルにホスト名で出力(逆引き済、HostnameLookups On)していると、どうやらうまく動かなかった点。(いずれにせよ、fail2banは、ログにホスト名で書かれているとIPに戻して動作するので、Apacheの苦労が無駄になる。)ApacheをHostnameLookups Onで使うのは邪道だろうけど、私のホストはそんなに人気がないので利便性を採る。そこで、本命のログとは別に、fail2ban用のログを平行して出力している。LogFormat %hを%aに替えるだけであり、特に難しくない。

HostnameLookups Offにしても、.htaccess等で、ホスト名でアクセス制御しているとOn (double)の動作になるので、Offにしていても同じ問題は出るはず。

NHKのウェブページで文字化け[edit]

問題の所在[edit]

NHKのウェブページをWeb::Scraperで取得して加工することがよくある。一つ難があり,文字化けすることがある。原因は,NHKはページの文字コードを「Shift_JIS」と名乗っているのに,実際には,Shift_JISから外れた「Windows機種依存文字」を偶に(必要に応じて?)使っているため。例えば「山﨑努」。固有名詞という理由(大義名分)だろうか。

こうした文字はShift_JISではなく「cp932」等と呼ばれる文字コードなら(一応)許される。しかし,ページが名乗っている文字コード名をそのまま受け入れるソフトウェア(Web::Scraperもその一つ)は,Shift_JISにない機種依存文字であり,未定義文字だと理解して,1バイト目を「置換文字」(U+FFFD)に変換してしまう。(2バイト目は半角カナなどに変換される。)そのため,人間にとっては文字化けする。

対処[edit]

Web::Scraperを呼び出す前に,

use Encode::Alias;
define_alias( qr/shift.*jis$/i  => '"cp932"' );

を加える。

補足[edit]

\x{fffd}という文字列に変換されるのは,画面等への出力時(encode時)。Web::Scraperは「﨑」をU+FFFDとU+FF71の2文字へ成功裏に変換する。その後,Encode:encodeやbinmodeなどがShift_JISまたはcp932に変換する際に\x{fffd}に変換する。

Web::Scraperの挙動は正しい仕様であり,おかしなことをしているのはあくまでもNHKである。しかし現実問題として情報が失われている。世の多くのブラウザーは「Shift_JIS」と「cp932」を厳密に区別しない*1。善し悪しはいわゆる波ダッシュ問題としても議論されている。さて,波ダッシュ問題は意味的に別の文字になってしまう,だが一定の法則があるので元の文字を推測できる*2。これに対し,今回の問題は元の文字が何だか分からなくなってしまう。より深刻と言えば深刻。

波ダッシュ[edit]

ただ,なんでもcp932にすればよいわけではない。というのも,「cp932はshift_jisに機種依存文字を加えたもの」ではないからだ。(そうだったら話は簡単だったのに。)この典型が波ダッシュ問題。波ダッシュ(~)の書かれたページの設定が,Shift_JISのときとcp932のときとでは,その後の運命が違う。議論があるが,簡単に言えば,cp932のときは(Web::Scraperなどで取得されると)別の文字(見た目はよく似ているが)になってしまう。そして,NHKのページには波ダッシュが多用されている。

もっとも先述のように,この問題はたいていの場合元に戻すことができるし,全文検索などでも対処可能なので,それほど大きな問題ではない。

外字まで[edit]

NHKのウェブページには「外字」(Windowsの利用者定義文字)が使われていることもある。例えば,「長崎県女クラスメイト」という記述を今日(2010年 8月 7日)見つけた。「女ク」の間の文字がどのように表示されるかは読み手が使っているソフトウェア(ブラウザー等)次第であり,例えばIE 8 on Windows 7やGoogle Chrome 6.0では「□」のように表示され,FF 3.6ではもっと直截に「普通じゃない文字」であることが分かるように表示される。NHK社内で使っている特別な文字・記号(業界の記号か何か?)がそのまま公開ページに出てきてしまったと推測される。NHK社内ではどのような文字を当てているのだろうか?(実際の放送を見ると,単なる空白になっていた。意味的にも空白となるべき場所。空白であることが見た目明確に分かるようにするための記号が当てられているのかも。)

PHP[edit]

複数バージョンPHPの使い分け RHEL 9[edit]

Alma Linux 9で、標準ではPHP 8.1、一部のフォルダーのみ7.4を使っている。まず、モジュールでphp 8.1を入れた後に、モジュールでないphp 7.4を入れた。そのままだと全体が7.4になってしまう(/etc/httpd/conf.d/php74-php.conf)ので、

	<FilesMatch \.(php|phar)$>
			SetHandler "proxy:unix:/var/opt/remi/php74/run/php-fpm/www.sock|fcgi://localhost"
	</FilesMatch>

を排除した上で、この排除した部分を、vhost_ssl.confなどの中、<Directory ...>命令に、加えた。

SimilarWeb[edit]


*1 正確には,波ダッシュ問題に見るように,首尾一貫しない解釈をする。
*2 この限りでは首尾一貫している。

添付ファイル: filedevtool_delelmnt.png 418件 [詳細] filebadPDFsample1.png 436件 [詳細] filehatena_help_cookie.png 539件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-07-09 (日) 21:25:36