2016年3月22日火曜日

php 5.6にしたcakephp 2.7.10で出たエラーメッセージ


Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0

対応

php.iniのalways_populate_raw_post_dataをアンコメントにする
always_populate_raw_post_data = -1

Apacheを再起動する。

2016年3月14日月曜日

Windows+Apache+Mssql+Php


SQL ServerにApacheとPHPをインストールしてSFTPで編集ができるようにする。

OpenSSHのインストール


最新のOpenSSH-Win64.zipをダウンロードして"C:\opt\OpenSSH"に解凍する
パワーシェルを管理者権限で起動する
1
2
PS C:\Windows\system32>
PS C:\Windows\system32> cd c:\opt\OpenSSH
SSHキーを設定します sshdで利用するキーファイルを作成します。
1
PS C:\opt\openssh> ssh-keygen.exe -A
もしくは
1
2
3
4
PS C:\opt\openssh> ssh-keygen.exe -t rsa -f ssh_host_rsa_key
PS C:\opt\openssh> ssh-keygen.exe -t dsa -f ssh_host_dsa_key
PS C:\opt\openssh> ssh-keygen.exe -t ecdsa -f ssh_host_ecdsa_key
PS C:\opt\openssh> ssh-keygen.exe -t ed25519 -f ssh_host_ed25519_key
ファイアウォールの設定 22番ポートを開放します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PS C:\opt\openssh> New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
 
Name                  : {36417373-ef5f-41d8-884f-169ba7a142d5}
DisplayName           : SSH
Description           :
DisplayGroup          :
Group                 :
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Block
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : 規則は、ストアから正常に解析されました。 (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local
sshdのセットアップ sshdセットアップ用のcmdを実行します。
1
PS C:\opt\openssh> setup-ssh-lsa.cmd
リブート OSの再起動を行います。 sshdサービスへの登録 サービスで起動するようにsshdをサービスに登録します。
1
2
PS C:\opt\openssh> sshd install
Service installed successfully
sshdサービスを起動 sshdをサービスから起動します。
1
2
3
PS C:\opt\openssh> net start sshd
SSHD サービスを開始します.
SSHD サービスは正常に開始されました。
windows起動時に自動でsshdを起動させたい場合は、こちらを実行
1
PS C:\opt\openssh> Set-Service sshd -StartupType Automatic
Macからwindowsにsshで接続
1
2
3
4
5
6
local$ ssh admin@192.168.24.18 -p 22
bsadmin@192.168.24.18's password:
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
 
admin@SSVR10 C:\Users\admin>
ForkLiftで接続してみる 繋がらない sftpサーバーの設定を忘れていた。 sshd_configを編集する。 これを
1
2
3
4
# override default of no subsystems
#Subsystem sftp /usr/libexec/sftp-server
Subsystem sftp /win32openssh/bin/sftp-server.exe
Subsystem scp /win32openssh/bin/scp.exe
下記のようにする
1
2
3
4
# override default of no subsystems
#Subsystem sftp /usr/libexec/sftp-server
Subsystem sftp C:\opt\OpenSSH\sftp-server.exe
Subsystem scp  C:\opt\OpenSSH\scp.exe

sshd再起動する

Apacheとphp


phpとApacheのVCバージョンは合わせる必要があります。phpがVC11ならApacheもVC11に、phpがVC14だとApacheもVC14とVCが同じでないと正しく動作しない場合があります。
Microsoft Visual C++ 2012 再頒布可能パッケージ (x64)
Apache 2.4.18 Win64とPHP 5.6 VC11 x64 Thread Safeをダウンロードする
httpd-2.4.18-win64-VC11.zipを解凍する。 できたApache24をC:\opt\Apache24に移動
php-5.6.19-Win32-VC11-x64.zipを解凍する。
php-5.6.19-Win32-VC11-x64をC:\opt\phpに変名する。
WindowsのPathにC:\opt\OpenSSH;c:\opt\php;を登録。
php.ini-productionからphp.iniを作製
php.iniを編集
1
2
; extension_dir = "ext"
extension_dir = "c:\opt\php\ext"
に変更 以下の行のセミコロンを外す
1
2
3
4
5
6
7
8
;extension=php_bz2.dll
;extension=php_gd2.dll
;extension=php_mbstring.dll
;extension=php_mysql.dll
;extension=php_mysqli.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_sqlite.dll
以下の行を追加
1
2
extension=php_sqlsrv_56_ts.dll
extension=php_pdo_sqlsrv_56_ts.dll
以下の行のセミコロンを外し値'Asia/Tokyo'を設定
1
2
;date.timezone =
date.timezone = 'Asia/Tokyo'

マイクロソフトのサイトから
SQLSRV32.EXEをダウンロード
もしくは"Microsoft Drivers for PHP for SQL Server"を検索
SQLSRV32.EXEを解凍して
1
2
php_sqlsrv_56_ts.dll
php_pdo_sqlsrv_56_ts.dll
の2つのファイルをc:\opt\php\extに保存します。

Apache httpd.confの編集

ServerRoot、DocumentRoot等を設定します。
1
2
3
4
5
6
<directory />
    Options FollowSymLinks
    AllowOverride All
    # AllowOverride none
    Require all denied
</Directory>
1
2
3
4
5
6
7
DocumentRoot "c:/var/www/htdocs"
<directory "c:/var/www/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    # AllowOverride None
    Require all granted
</Directory>
1
2
3
<ifmodule alias_module>
    ScriptAlias /cgi-bin/ "c:/var/www/cgi-bin/"
</IfModule>
1
2
3
4
5
<directory "c:/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
以下のコメントを外す
1
#LoadModule rewrite_module modules/mod_rewrite.so
以下の行を追加します
1
2
3
LoadModule php5_module "C:/opt/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/opt/php"
1
2
3
<ifmodule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

そしてIPアドレスとホスト名を指定します。
ローカルサーバーならこんな感じ。
1
2
Listen 127.0.0.1:80
ServerName localhost:80

次にApacheをWindowsのサービスとして登録します。コマンドプロンプトを管理者権限で起動してから、C:\opt\Apache24\binフォルダに移動します。そして httpd -k install と入力すると登録完了です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
 
C:\Windows\system32>cd \opt\apache24\bin
 
C:\opt\Apache24\bin>httpd -k install
Installing the 'Apache2.4' service
The 'Apache2.4' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
AH00526: Syntax error on line 244 of C:/opt/Apache24/conf/httpd.conf:
DocumentRoot must be a directory
 
C:\opt\Apache24\bin>
ファイアーウォールにWebの設定が無ければ下記を実行
1
PS C:\Windows\system32>New-NetFirewallRule -Protocol TCP -LocalPort 80 -Direction Inbound -Action Allow -DisplayName "Apache Web server"

C:\var\www\cakephpにcakephp-2.7.x を解凍
webrootのジャンクションをhtdocsに作る
1
2
3
cd \var\www\htdocs
mklink cake c\:var\www\cakephp\app\webroot
mklink api c:\var\www\cakephp\app-api\webroot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\var\www\htdocs>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 0488-3DE3 です
 
 C:\var\www\htdocs のディレクトリ
 
2016/03/11  17:47    <dir>          .
2016/03/11  17:47    <dir>          ..
2016/03/11  17:47    <junction>     api [c:\var\www\cakephp\app-api\webroot]
2016/03/11  17:46    <junction>     cake [c:\var\www\cakephp\app\webroot]
2007/06/11  20:53                46 index.html
2016/01/26  18:47             1,169 index.php
2016/01/19  11:39                16 info.php
               3 個のファイル               1,231 バイト
               4 個のディレクトリ  975,303,733,248 バイトの空き領域
 
C:\var\www\htdocs>

1
<?php phpinfo();
htdocsに上記をphpinfo.phpで保存する。