httpd.confのディレクティブの入れ子設定

通常はPHP7(モジュール)で動かしているサイトの、特定ディレクトリだけPHP5(CGI)で動かしたくて試行錯誤。

もともと、PHP7のほうは、
SetHandler application/x-httpd-php

PHP5のほうは
AddHandler fcgid-script .php

で、設定していた。

DirectoryMatchとか、FilesMatchでうまいことできないか試してみてもうまくいかず。

結局、まず最初にPHP7の設定を、
AddHandler application/x-httpd-php .php

で、設定して、特定ディレクトリのほうを、
SetHandler fcgid-script

で、上書きすることで対応した。

なんか、あんまスマートじゃない。

電卓ボタンから電卓の複数起動を回避する試行錯誤

マイクロソフトのエルゴノミック系のキーボードを使っている。
テンキーに電卓ボタンがついていて便利なのだが、押すたびに電卓が立ち上がる。
複数起動を避けるために試行錯誤したメモ。

system32/calc.exeがランチャーの様子。
これをいじりたかったけど、権限がうんたらでうまくいかず。

batかvbsで、電卓を立ち上げる、立ち上がっていればフォーカスを与えるようにする。

いろいろ試したけど、vbsのWscript.ShellのAppActivateで電卓にフォーカスを与えることができず。
メモ帳とかはOK。UWPだから?
仕方ないので、適当な電卓ソフトを探してきて、設置。

VBSを準備

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Const strCalcExe = "BunCalc.exe" 'プロセス名
 
call ActiveCalc
 
sub ActiveCalc()
    Dim objWshShell
    Dim calcID
    
    calcID=GetProcID(strCalcExe)
 
 
    'MsgBox calcID
 
    Set objWshShell = CreateObject("Wscript.Shell")
 
    IF calcID = 0 Then
       strCmdLine = "D:\nonInstallPrograms\BunCalc\BunCalc.exe"
       Set objExecCmd = objWshShell.Exec(strCmdLine)
    Else
       objWshShell.AppActivate calcID
    End If
 
 
    Set objWshShell = Nothing
End Sub
 
Function GetProcID(ProcessName)
    Dim Service
    Dim QfeSet
    Dim Qfe
    Dim RetInt
 
    Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
    Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")
 
    RetInt = 0
    
    For Each Qfe in QfeSet
        RetInt =  Qfe.ProcessId
        Exit For
    Next
 
    GetProcID = RetInt
End Function
Const strCalcExe = "BunCalc.exe" 'プロセス名

call ActiveCalc
 
sub ActiveCalc()
    Dim objWshShell
    Dim calcID
    
    calcID=GetProcID(strCalcExe)


    'MsgBox calcID

    Set objWshShell = CreateObject("Wscript.Shell")

    IF calcID = 0 Then
       strCmdLine = "D:\nonInstallPrograms\BunCalc\BunCalc.exe"
       Set objExecCmd = objWshShell.Exec(strCmdLine)
    Else
       objWshShell.AppActivate calcID
    End If


    Set objWshShell = Nothing
End Sub
 
Function GetProcID(ProcessName)
    Dim Service
    Dim QfeSet
    Dim Qfe
    Dim RetInt
 
    Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
    Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")

    RetInt = 0
    
    For Each Qfe in QfeSet
        RetInt =  Qfe.ProcessId
        Exit For
    Next
 
    GetProcID = RetInt
End Function

キーの割り当ては、レジストリ。
電卓ボタンは18番らしい。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18
文字列値を新規で追加する

名前 ShellExecute
値 VBSファイルの絶対パス

PLESK11ではまったこと httpd.conf

それぞれのドメインのapacheのconfは、
/var/www/vhosts/DOMAIN_NAME/conf

に、あるっぽい。そのなかのhttpd.includeは編集してはならず、
vhost.conf
vhost_ssl.conf
を作成してそこに書く必要がある

それだけではだめで、pleskに認識させる必要があるので下記コマンド

/usr/local/psa/admin/sbin/httpdmng –reconfigure-domain DOMAIN_NAME

/usr/local/psa/admin/sbin/httpdmng –reconfigure-all

今回は、fcgiのmaxRequestLen


FcgidMaxRequestLen 60485760

Win8.1にApacheとPHPをインストールしようとしてはまったこと

モジュールでPHPを読み込んで、httpd.confを書き換えてApacheを起動しようとすると、

httpd:Syntax Error on Line 135 of C:/apache/Apache22/conf/httpd.conf:Cannot load c:\php\php5apache2_2.dll into server ——–

と、なる。

どうやら、PHPが32bit版で、Apacheが64bit版だったのが問題。Apacheを32bitにしたら動いた。

スマホでピンチアウトして拡大した時に、一撃でデフォルトサイズに戻す方法

1
2
3
4
5
6
7
8
9
10
11
12
13
function resetScale(){
    var metalist = document.getElementsByTagName('meta');
    var target = 0;
    for(var i = 0; i < metalist.length; i++) {
        var name = metalist[i].getAttribute('name');
        if(name && name.toLowerCase() === 'viewport') {
            metalist[i].setAttribute('content', 'width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no');
            target = i;
            break;
        }
    }
    metalist[target].setAttribute('content', 'width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=2.0,user-scalable=yes');
}
function resetScale(){
	var metalist = document.getElementsByTagName('meta');
	var target = 0;
	for(var i = 0; i < metalist.length; i++) {
		var name = metalist[i].getAttribute('name');
		if(name && name.toLowerCase() === 'viewport') {
			metalist[i].setAttribute('content', 'width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no');
			target = i;
			break;
		}
	}
	metalist[target].setAttribute('content', 'width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=2.0,user-scalable=yes');
}

Androidで縦書きをぴったり画面サイズに合わせるJS

epubビューアーを作ろうと思って、縦書き表示をCSSで作ったのだけど、Androidで、1行が画面ピッタリに表示されない。
ロードされた段階で自動的に謎のサイズに拡大されている。1行が、横書きの時に収まるサイズで計算されている気がする。
CSSだけで頑張りたかったけど、うまくいかないので、JSで。

1
2
3
4
5
6
7
8
9
10
$(document).ready(function(){
    var chars = 40;//一行あたりの文字列
    var zoomer = document.body.clientWidth / window.innerWidth;
    var realHeight = $(window).height() / zoomer;
    var fontSize = realHeight/chars;
    $(".wrapper").height(realHeight);
    $(".wrapper").css("padding",(fontSize*1)+"px");
    $(".wrapper").css("font-size",fontSize+"px");
    $(window).scrollLeft(0);
});
$(document).ready(function(){
	var chars = 40;//一行あたりの文字列
	var zoomer = document.body.clientWidth / window.innerWidth;
	var realHeight = $(window).height() / zoomer;
	var fontSize = realHeight/chars;
	$(".wrapper").height(realHeight);
	$(".wrapper").css("padding",(fontSize*1)+"px");
	$(".wrapper").css("font-size",fontSize+"px");
	$(window).scrollLeft(0);
});

CentOS7とWindows7をデュアルブート

HDDに空き領域を確保

windows7で
コンパネ>システム>管理ツール>未割当の領域を作る
https://technet.microsoft.com/ja-jp/windows/win7_tips61.aspx
フォーマットする必要なし。centos7インストール時にうまいことやってくれる

インストール

インストールディスクでcentos7インストール

  • ディスクはウィンドウズが入ってるHDD一個しか見えないけど、その空き領域にインストールしてくれる
  • 種類はサーバー(GUI)を選択
  • centos7用の各ディレクトリパーティションを設定してインストール

ブートローダー設定

Win7が立ち上がるように設定

fdisk -l

で、Win7が入ってそうなパーティションを見つける
たぶん、/dev/sda3

vi /etc/grub.d/40_custom
で、末尾に

1
2
3
4
menuentry "Windows 7" {
    set root=(hd0,2)
    chainloader +1
}
menuentry "Windows 7" {
	set root=(hd0,2)
	chainloader +1
}

を、追加

grub2-mkconfig -o /boot/grub2/grub.cfg

で、エラーが出ないことを確認する

sudoでもpermission denied

共有HDDのファイルを別のPCからいじった場合、サーバーにしてるubuntuにキャッシュがのこってて古いバージョンが表示されたりしてたので、解決策模索。

echo 1 /proc/sys/vm/drop_caches
で、キャッシュが消える。当然rootで実行せなならん。

sudo echo 1 /proc/sys/vm/drop_caches
だと、permission deniedになる。

teeと組み合わせて、
echo 1 | sudo tee /proc/sys/vm/drop_caches > /dev/null
で、OK。

ロジックはわからん。