さくらインターネットで開発中WEB経由でCGIが正常に動かない場合(2)

実行方法が違うとは言え、
同じサーバーであるアプリが動いたり動かなかったりするということは、
環境変数が疑わしいです。

こんなシンプルな環境変数確認スクリプトを使います。

#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print <<END_HTML;
<html>
  <head><title>環境変数テスト表示</title></head>
  <body>
$ {
  foreach $key (keys %ENV) {
    print "$key : $ENV{$key}<br>\n";
  }
}
  </body>
</html>
END_HTML

 

SSHでログインしてから実行した結果です。

$ ./env.cgi

みたいにして実行します。

Content-Type: text/html
SSH_CLIENT : 182.170.182.130 54025 22<br>
HOST : www758.sakura.ne.jp<br>
REMOTEHOST : pb6aab682.tubehl00.ap.so-net.ne.jp<br>
BLOCKSIZE : K<br>
OSTYPE : FreeBSD<br>
PWD : /home/****/www/WordPress/kyokigo<br>
LANG : ja_JP.UTF-8<br>
USER : ****<br>
LC_MESSAGES : C<br>
LOGNAME : ****<br>
GROUP : users<br>
SHLVL : 2<br>
PERL5LIB : /home/****/perl5/lib/perl5:/home/****/local/lib/perl5:/home/****/local/lib/perl5/site_perl<br>
PATH : /home/****/perl5/bin:/home/****/.local/bin:/home/****/local/bin:/home/****/local/bin:/home/****/local/bin<br>
FTP_PASSIVE_MODE : YES<br>
HOSTTYPE : FreeBSD<br>
TERM : xterm<br>
SSH_TTY : /dev/pts/0<br>
PAGER : more<br>
HOME : /home/****<br>
LD_LIBRARY_PATH : /home/****/local/lib<br>
SSH_CONNECTION : 182.170.182.130 54025 59.106.19.208 22<br>
PORT_DBDIR : /home/****/local/var/db/pkg<br>
PKG_DBDIR : /home/****/local/var/db/pkg<br>
MAIL : /var/mail/****<br>
EDITOR : jvim3<br>
VENDOR : amd<br>
PERL_CPANM_OPT : --local-lib=~/perl5<br>
OLDPWD : /home/****/www/WordPress<br>
_ : ./env.cgi<br>
SHELL : /bin/csh<br>
MACHTYPE : x86_64<br>
PYTHONPATH : /home/****/local/lib/python:/home/****/local/lib/python/site-packages<br>
<html>
<head><title>環境変数テスト表示</title></head>
<body>

</body>
</html>

 

次にブラウザ経由の結果です。

SCRIPT_NAME : /kyokigo/env.cgi
SERVER_NAME : azi2.com
SERVER_ADMIN : support@sakura.ad.jp
HTTP_ACCEPT_ENCODING : gzip, deflate
HTTP_CONNECTION : keep-alive
REQUEST_METHOD : GET
HTTP_ACCEPT : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
SCRIPT_FILENAME : /home/****/www/WordPress/kyokigo/env.cgi
SERVER_SOFTWARE : Apache/2.2.31
QUERY_STRING : 
REMOTE_PORT : 54135
HTTP_USER_AGENT : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
SERVER_PORT : 80
SERVER_SIGNATURE : 
HTTP_CACHE_CONTROL : max-age=0
HTTP_UPGRADE_INSECURE_REQUESTS : 1
HTTP_ACCEPT_LANGUAGE : ja,en-US;q=0.8,en;q=0.6
HTTP_COOKIE : tk_tc=1494519311953; tk_ai=jetpack%3AMCzZhyihuZp1GWiGp6icQbIg; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_a3334da665c02922f2d3819a4a81bc86=****%7C1498928562%7COOozksxcFZgKTYwZJgHSZ52mXcjyr88tS7s7yKBA3M2%7C563dabd3211c252e3f0c5ada0cd6da24fd73a8304b4edb2a9c6336d85a2b1392; wp-settings-1=editor%3Dtinymce%26libraryContent%3Dbrowse%26imgsize%3Dmedium; wp-settings-time-1=1498890306
REMOTE_ADDR : 182.170.182.130
SERVER_PROTOCOL : HTTP/1.1
PATH : /usr/local/bin:/usr/bin:/bin
REQUEST_URI : /kyokigo/env.cgi
GATEWAY_INTERFACE : CGI/1.1
SERVER_ADDR : 59.106.19.208
REMOTE_HOST : pb6aab682.tubehl00.ap.so-net.ne.jp
DOCUMENT_ROOT : /home/****/www
HTTP_HOST : azi2.com

かなり少なく、シンプルになっている感じがしますね。
ざっとみた感じでは
ユーザーのPATHが通ってないのと、
HOME、LANG、LD_LIBRARY_PATHがないですね。

環境変数を強引に設定する

もしかするともっと正しいやり方があるような気がしますが、
強引に環境変数を設定してしまいましょう。

$ENV というハッシュのキーを環境変数名にして設定すれば良いです。

こんな風に冒頭に入れ込みます。

$ENV{'HOME'}="/home/****";
$ENV{'LANG'}="ja_JP.UTF-8";
$ENV{'PATH'}="/home/****/perl5/bin:/home/****/local/bin";
$ENV{'LD_LIBRARY_PATH'}="/home/****/local/lib";

もう一度ブラウザ経由で実行してみます。

反映されました!

HOME : /home/****
SCRIPT_NAME : /kyokigo/env.cgi
SERVER_NAME : azi2.com
LD_LIBRARY_PATH : /home/mlin/local/lib
SERVER_ADMIN : support@sakura.ad.jp
HTTP_ACCEPT_ENCODING : gzip, deflate
HTTP_CONNECTION : keep-alive
REQUEST_METHOD : GET
HTTP_ACCEPT : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
SCRIPT_FILENAME : /home/****/www/WordPress/kyokigo/env.cgi
SERVER_SOFTWARE : Apache/2.2.31
LANG : ja_JP.UTF-8
QUERY_STRING :
REMOTE_PORT : 54374
HTTP_USER_AGENT : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
SERVER_PORT : 80
SERVER_SIGNATURE :
HTTP_CACHE_CONTROL : max-age=0
HTTP_UPGRADE_INSECURE_REQUESTS : 1
HTTP_ACCEPT_LANGUAGE : ja,en-US;q=0.8,en;q=0.6
HTTP_COOKIE : tk_tc=1494519311953; tk_ai=jetpack%3AMCzZhyihuZp1GWiGp6icQbIg; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_a3334da665c02922f2d3819a4a81bc86=****%7C1498928562%7COOozksxcFZgKTYwZJgHSZ52mXcjyr88tS7s7yKBA3M2%7C563dabd3211c252e3f0c5ada0cd6da24fd73a8304b4edb2a9c6336d85a2b1392; wp-settings-1=editor%3Dtinymce%26libraryContent%3Dbrowse%26imgsize%3Dmedium; wp-settings-time-1=1498890306
REMOTE_ADDR : 182.170.182.130
SERVER_PROTOCOL : HTTP/1.1
PATH : /home/****/perl5/bin:/home/****/local/bin
REQUEST_URI : /kyokigo/env.cgi
GATEWAY_INTERFACE : CGI/1.1
SERVER_ADDR : 59.106.19.208
REMOTE_HOST : pb6aab682.tubehl00.ap.so-net.ne.jp
DOCUMENT_ROOT : /home/****/www
HTTP_HOST : azi2.com

これで多分うまくいくはずです!