質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1418閲覧

ApacheでRewriteを使ってPHPにGETパラメータにjson配列を渡したがjson_docodeするとNULLになる

退会済みユーザー

退会済みユーザー

総合スコア0

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/17 11:50

編集2019/06/17 12:51

実現したいこと

渡されたjson配列(["xxx"])をインデックス配列にしたい(下のコードだと$body[3][0]という形でとれるように)

発生している問題

渡されたjsonをjson_decodeでインデックス配列にしたいがNULLがかえってくる

関連するコード

apache

1# .htaccess 2# calendarディレクトリに入っていています 3RewriteEngine On 4 5# 省略 6 7RewriteCond %{REQUEST_URI} api/update/(.*)/(.*)/(.*)/(.*) 8RewriteRule api/update/(.*) ./srv/update.php?y=%1&m=%2&d=%3&plan=%4 9 10# 省略 11

php

1// update.php 2 3$body =array($_GET["y"],$_GET["m"],$_GET["d"],json_decode($_GET["plan"], true)); 4 5print_r($body);
curl localhost/calendar/api/update/2019/6/14/["xxx"] --globoff Array ( [0] => 2019 [1] => 6 [2] => 14 [3] => )

試したこと

print_r($_GET["plan"])としたときに、ダブルクォーテーションが消えていたのでcurlで送るときにダブルクォーテーションの前にバックスラッシュを入れてみましたが何の効果もありませんでした

環境

Apache 2.4.9
PHP 7.3.4
curl 7.55.1
Windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/06/17 12:33

["xxx"] というのは、json_decodeした結果、どうなっていて欲しいと思って書いたのでしょうか?
退会済みユーザー

退会済みユーザー

2019/06/17 12:52

インデックス配列にしようと思いました。
otn

2019/06/17 13:02

↑具体的にはどういうことでしょうか?
退会済みユーザー

退会済みユーザー

2019/06/17 13:04

うえのphpのコードだと $body[3][0] で"xxx"が取れるようにしたいです
guest

回答2

0

ベストアンサー

sh

1curl 'localhost/calendar/api/update/2019/6/14/["xxx"]' --globoff 2とか、 3curl localhost/calendar/api/update/2019/6/14/%5B%22xxx%22%5D 4とか

投稿2019/06/17 13:27

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/17 13:29

シェル上で展開されてそうな気がしますね、でもそれだけじゃないんじゃないかとも思えたり。(原因がいろいろ複合しているのかと。)
退会済みユーザー

退会済みユーザー

2019/06/20 10:41

上のコードではだめでしたが、下ではできました。 urlエンコードを使えばできるんですね。 ありがとうございます。
guest

0

RewriteCond %{REQUEST_URI} api/update/(.*)/(.*)/(.*)/(.*)

でなく

RewriteCond %{REQUEST_URI} ^/api/update/(.*)/(.*)/(.*)/(.*)

ではどうか。
http://httpd.apache.org/docs/current/mod/mod_rewrite.htmlによると、
REQUEST_URIの場合は「/」からの絶対パス名で記述する必要がありそう。

なお、mod_rewriteのデバッグのために、ログレベルなどを調整すると良いかも。
Apacheのrewritelogの出力方法(Apache2.2とApache2.4で違います) - Qiita

投稿2019/06/17 13:21

編集2019/06/17 13:35
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/06/17 13:29

正規表現先頭に ^ がないので、REQUEST_URIの2文字目からマッチします。 まあ、^/api/update/(.*)/(.*)/(.*)/(.*) と書いた方が良いですが。
退会済みユーザー

退会済みユーザー

2019/06/17 13:30

おおっと失敬
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問