NginxでNon Thread-PHPを使いたい。
OS:win10
DB:MariaDB
サーバー:Nginx/PHP
/users/サーバー/php
/users/サーバー/nginx
PHP = システム環境変数
Nginx = ユーザー環境変数
試したこと、
(前回:Non Thread-PHPではなく、Thread-PHPで接続できた)
↓
https://teratail.com/questions/303745
この時、Nginxは使ってない。(PHPを単体で動かしていた)
しかしNginxで動かすには、Thread-PHPではなく
Non Thread-PHPを使わなければならないことを以下のサイトで知り、
https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/14/125116
前回と同じ方法で早速動かしてみた。
なぜか接続できず、めちゃくちゃ文字化けしています。
こんどは
PHPのextensionでセミコロンをあえてつけてみてみると
php
1;extension=pdo_mysql
↓以下のような結果に。
文字化けしてない!
しかし、実行結果でのエラーは先ほどと変わりません。↓
どうやらNginx側でnginx.confの設定が必要らしいです。
https://qiita.com/suke/items/4936809289ffe0dc782b
とりあえずコピペで。実行↓
nginxini
1 2 3# ワーカープロ説を実行するユーザーの指定 4#user nobody; 5 6# ワーカープロセス(クライアントからリクエストを受け付けて処理するnginxの子プロセス)の数 7worker_processes 1; 8 9# プロセスIDを保存するファイルの場所 10#pid logs/nginx.pid; 11 12events { 13 # 1ワーカープロセスあたりの最大コネクション数のあたし 14 worker_connections 1024; 15} 16 17http { 18 #### MIMEタイプの設定 19 include mime.types; #拡張子とMIMEタイプの対応ファイルを読み込む 20 default_type application/octet-stream; #拡張子からMIMEタイプを判断できなかった場合のMIMEタイプ 21 22 #### アクセスログの設定 23 # アクセスログの書式の設定、main形式を下記の形式で指定 24 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 25 '$status $body_bytes_sent "$http_referer" ' 26 '"$http_user_agent" "$http_x_forwarded_for"'; 27 # アクセスログの出力場所や書式の指定、main形式でlogs/access.logに出力する 28 #access_log logs/access.log main; 29 30 #### クライアントへの送信(レスポンス)に関する設定 31 # クライアントへの送信にsendfileシステムコールを使うか 32 sendfile on; 33 # LinuxのTCP_CORKソケットオプションを使用するか 34 #tcp_nopush on; 35 36 # keepaliveのタイムアウト時間の設定、65秒 37 keepalive_timeout 65; 38 39 # クライアントにコンテンツを送信する際に圧縮転送するかどうかの設定 40 #gzip on; 41 42 #### バーチャルサーバーの設定 43 server { 44 #### サーバーの基本設定 45 # リクエストを受け付けるIPアドレスやポート番号を設定 46 listen 80; 47 # バーチャルサーバーのホスト名を設定 48 server_name localhost; 49 # rootドキュメントを指定、windowsでも「\」ではなく「/」でディレクトリ階層を指定 50 root C:/server/htdocs/testProject/public; 51 # indexファイル名を設定、 52 # URLが「/」で終わってるものに対してインデックスとして使われるファイル名の指定 53 index index.php index.html index.htm; #前から順番に適用される 54 55 #### サーバー別のログの設定 56 # アクセスログの出力先と出力形式の設定、main形式で出力 57 access_log logs/access.log main; 58 # エラーログの出力先とロギングレベルの設定、noticeレベルまで出力 59 error_log logs/error.log notice; 60 61 #### エラーページの設定 62 #error_page 404 /404.html; 63 error_page 500 502 503 504 /50x.html; #エラーページのパスを設定 64 location = /50x.html { #「/50x.html」にパスが完全一致、一致したら切り上げ 65 root html; 66 } 67 68 #### PHPの設定 69 # 正規表現、パスが「xxxx.php」や「aaa/xxxx.php」や「abc/xxxx.php/bbbb」などに一致 70 location ~ [^/].php(/|$) { 71 # $fastcgi_path_info の値をキャプチャする正規表現を定義 72 # 一つ目の()が $fastcgi_script_name の値になり、二つ目は $fastcgi_path_info の値になる 73 fastcgi_split_path_info ^(.+?.php)(/.*)$; 74 75 # $document_root ルートディレクトリで設定したパス 76 # $fastcgi_script_name ファイル名のパス 77 # -f はファイルが存在するかの判定 78 # ファイルがなければ404エラーを返す 79 if (!-f $document_root$fastcgi_script_name) { 80 return 404; 81 } 82 83 # phpへアクセスするためのIPアドレスとポートの設定 84 fastcgi_pass 127.0.0.1:9000; 85 # phpでのindexファイル名を設定、 86 # URLが「/」で終わってるものに対してインデックスとして使われるファイル名の指定 87 fastcgi_index index.php; 88 89 #### fastcgi_param に関する設定 90 # 多数のfastcgi_paramsの設定が書いてあるfastcgi_paramsファイルを読み込む 91 include fastcgi_params; 92 # 「HTTP_PROXY」パラメータを空にする、HTTPoxyに関する脆弱性を和らげる 93 fastcgi_param HTTP_PROXY ""; 94 # 「SCRIPT_FILENAME」パラメータはphp-fpmがスクリプト名を決定するための設定 95 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 96 } 97 } 98} 99
進展がありました↓ 「Error:could not find driver」に変わっています
php.iniの ;extension=pdo_mysqlでセミコロンをはずしてやってみます。
エラーレスポンスは「Error:could not find driver」同じですが
コマンド側の文字化けがひどいですね、
先ほどNginx.iniただ丸ごとコピペしただけなので
当然ファイルなどの指定ミスでできてない可能性があります。
なので
nginxini
1 #### バーチャルサーバーの設定 2 server { 3 #### サーバーの基本設定 4 # リクエストを受け付けるIPアドレスやポート番号を設定 5 listen 80; 6 # バーチャルサーバーのホスト名を設定 7 server_name localhost; 8 # rootドキュメントを指定、windowsでも「\」ではなく「/」でディレクトリ階層を指定 9 root C:/server/nginx/html; 10# コピペ時の=>C:/server/htdocs/testProject/public; 11# コピペ前の=>root html;
実行結果は変わりませんでした。
質問とはあまり関係ないのですが一体どこで文字化けしているのか、やはり気になりますね。
知っている方がいたら教えてください。
回答2件
あなたの回答
tips
プレビュー