🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Apache

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

1287閲覧

JavaScriptからPHPに値を渡してディレクトリを作成したい

ohyama

総合スコア29

Apache

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/11/04 14:39

###前提・実現したいこと
PHPで送信ボタンを押したら任意の名前のディレクトリを作成するようなプログラムを作りたいのですが、思うようにディレクトリが作成されません。以下のソースコードではtest1.phpの画面で送信ボタンを押すと、test2.phpに遷移します。その際に「今日の日付/任意の文字列」というディレクトリが作成される予定です。現在は今日の日付のディレクトリまでしか作成されず、任意の文字列のディレクトリが作成されません。

###該当のソースコード

PHP

1//test1.php 2<?php 3 session_start(); 4?> 5<html> 6<head> 7 <meta http-equiv="Content-Type" content="text/html"; "charset=utf-8" /> 8</head> 9<body> 10 <form action="test2.php" method="post"> 11 <input type="submit" value="送信" onclick="send()"> 12 </form> 13 <script src="./jquery-3.3.1.min.js"></script> 14 <script type="text/javascript" src="./test1.js"></script> 15</body> 16</html>

JavaScript

1//test1.js 2var url = "http://IPアドレス/test2.php"; 3function send() 4{ 5 $.ajax( 6 { 7 url:url, 8 type: "POST", 9 data: {"moji":"あいうえお"} 10 } 11 ).done( 12 function (resp) { 13 console.log(resp); 14 } 15 ); 16}

PHP

1<?php 2session_start(); 3if (isset($_POST['moji'])) { 4 $moji = $_POST['moji']; 5 $_SESSION["MOJI"] = $moji; 6 var_dump($moji); 7} 8$date = date("Y-m-d"); 9$mask = umask(); 10umask(000); 11if (!file_exists($date)) { 12 if (mkdir($date."/".$moji, 0777, true)) { umask($mask); 13 } 14} 15?>

###発生している問題・エラーメッセージ
var_dumpで変数の中身を表示させてもNULLとなっていたので、値が送信できていないのだと思います。

###試したこと
文字が日本語だからダメなのかと思い、「あいうえお」の部分を「aiueo」にしても結果は変わらず、ディレクトリは作成されませんでした。

###補足
Google Chromeで実行すると思うようにディレクトリが作成されます(しかし相変わらずvar_dumpの結果はNULLです)。Firefoxブラウザで実行すると、今日の日付ディレクトリまでしか作成されません。
Firefoxのバージョンは70.0.1です。

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

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

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

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

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

m.ts10806

2019/11/04 20:26

>var_dumpで変数の中身を表示させてもNULL これはどうやって確認したのでしょうか。 Ajaxだと「表示」という確認の仕方にはならないと思うのですが。 またPOSTの値ではなく固定値では作成されますか?
ohyama

2019/11/04 20:45

test2.phpのvar_dumpをif文の外に出したりしてチェックしました。 固定値で直に「aiueo」と打つと作成できました。
m.ts10806

2019/11/04 21:00 編集

>test2.phpのvar_dumpをif文の外に出したりしてチェックしました。 そういうことではなく、「表示させた」というのはどこにどう表示させて確認したのかということです。何を見て「NULLだった」と言っているのかということです。
m.ts10806

2019/11/04 21:02

もう1点確認です。 Ajaxで実行したいのか、form送信で実行したいのか、どちらでしょうか。 今の作りだと「同時に実行」しているように見えます。送信先が同じですしね。 Ajaxであればformのsubmitは不要ですし、form送信でしたらAjaxは不要です。
ohyama

2019/11/04 21:07

ブラウザにNULLと書いてありました。Ajaxで実行したいです。
m.ts10806

2019/11/04 21:10

Ajaxは「画面遷移なしにバックグラウンドで実行する」ものなので「遷移します」の時点でおかしいといえばおかしいです。 ひとまずinput type=submitを「button」に変更してください。 デバッグはログに出力するのが良いですが、一応Ajaxで実行した先の「出力」をdoneで拾うようになっているのでそれでも何かしら確認は可能です。
guest

回答2

0

PHPで送信ボタンを押したら任意の名前のディレクトリを作成するようなプログラムを作りたいのですが

「サーバ管理専用の機能で、一般ユーザーに開放しない」というのであれば話は別ですが、そもそも論として機能性自体が適切ではありません

ユーザーから来る入力はどんなものがあるかわかりませんので(制御文字、ディレクトリトラバーサル、ヌル文字インジェクションなど)、ユーザー入力をそのまま物理的なファイル名と対応させるのは、できるだけ避けるべきです。

投稿2019/11/05 00:12

maisumakun

総合スコア145963

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

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

maisumakun

2019/11/05 00:43

サーバサイドにディレクトリを作っても、(一般的な設定では)エンドユーザーからは、それを確認することすらできません。 最終的にユーザーに提供したい機能性は、どのようなものなのでしょうか。
guest

0

2段階分のディレクトリを一気に作ろうしていますか?
2回にわけて処理してみては?
(maisumakunの指摘の通り、管理されていないユーザーに許す処理ではないですが)

どうしてもというならexex+sudoで大抵のことはできてしまいます
(大抵のこと=システムの破壊もふくむ)

投稿2019/11/05 00:40

yambejp

総合スコア116661

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問