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

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

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

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

Q&A

解決済

3回答

5470閲覧

PHPで、サーバー上にディレクトリを作りたい

P0Po

総合スコア12

PHP

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

0グッド

0クリップ

投稿2016/12/08 03:50

編集2016/12/12 02:01

###前提・実現したいこと
Linuxでサーバーを自作し、そこにフォルダを作成したいのですが、フォルダ作成がうまくできません。

###発生している問題・エラーメッセージ
エラーなく実行されるが、実際に見てみると作成されていない。

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

PHP

1 defined("DS") || define("DS", DIRECTORY_SEPARATOR); 2 $path = "DS.DS.IPアドレス.DS.Share.DS.test"; 3 if (file_exists($path)) { 4 echo "$path が存在します"; 5 } else { 6 if(mkdir($path)){ 7echo <<<EOM 8<script type="text/javascript"> 9 alert( "作成しました。" ) 10</script> 11EOM; 12 } else { 13echo <<<EOM 14<script type="text/javascript"> 15 alert( "作成できません。" ) 16</script> 17EOM; 18 } 19 }

###試したこと
Linuxコマンドでパーミッションを変更してみました。
chmod a*rwx share

試しに、Localhostで実行してみたところ無事に作成されました。
しかし、これをFFFTPでサーバーにコードを上げて実行すると、「作成されました」
というメッセージが出るのですが実際にはされていません。(探してみると、PHPファイルがある場所と同じところに作成されていました。)
また、PHPでこのサーバーへのファイルのアップロード・ダウンロードはできています。
###補足情報(言語/FW/ツール等のバージョンなど)
PHP ver5.6
Shareフォルダの情報
browsable=yes
writable=yes
guest ok=yes
read only=no

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/12/12 00:45

作成されないのは、単純な名前でも全く作成できないのか、作成されるけど狙ったとおりに作成されないのか、適切に質問文に表現してください。
退会済みユーザー

退会済みユーザー

2016/12/12 03:01

質問文に、サーバーないローカルにディレクトリ作成したいのか、別な場所にディレクトリ作成したいかが明示されていなので、そういった情報も添えてあれば回答が早くより適切についたと思います。
P0Po

2016/12/13 07:12

アドバイスありがとうございます。次回からそう致します。
guest

回答3

0

ベストアンサー

やっと状況が見えてきました。(間違ってたらスルーしてください)
そもそも、linuxでUNCパス形式でWindows共有(SMBでの共有)ファイルへアクセスできないです。

PHP

1$path = "DS.DS.IPアドレス.DS.Share.DS.test";

って //127.0.0.1/Share/testって感じのUNC Pathですよね?
(厳密にはUNC pathは\[servername]\Share\test と'/'では無く''でなければなりません。)

試しに、Localhostで実行してみたところ無事に作成されました。

このlocalhostってWindowsのxamp環境だったりしませんか?

LinuxでWindows共有へアクセスするためには、samba-client で Windows共有をマウントします。
アプリケーションではマウントしたマウントポイントを介して通常のディレクトリへのアクセスと同じ方法でアクセスします。

参考
(atmarkit)Windows上のファイルにLinuxからアクセスするには(mount.cifs編)

投稿2016/12/12 02:08

編集2016/12/12 02:41
Y.H.

総合スコア7914

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

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

P0Po

2016/12/12 02:33

>このlocalhostってWindowsのxamp環境だったりしませんか? そうです!Windowsです。 Y.H.の提示した方法でマウントし、そこにmkdir()してみたらいけました! ありがとうございました。
Y.H.

2016/12/12 02:51

「Shareフォルダ」がPHPを実行しているサーバーと同じサーバーにあるのであれば、 sambaでshareとして公開しているディレクトリを指定して直接書き込む方がいいです。 こんな感じで/etc/samba/smb.conf に定義しているなら、 [share] path = /xxx/yyy こんな感じで。 $path = '/xxx/yyy' . DS . "test";
P0Po

2016/12/13 07:15

直接書き込む方法でフォルダを作ってみたら、パーミッションが755で作成されていますのですが、777で作成するにはどうすれば良いですか? umaskコマンドで0000にしたり、php側でchmod()で0777を指定しても変わりません。 また、mountする際にdir_modeを0777にしてmountしても、0755で作成されてしまいます。
Y.H.

2016/12/13 07:44

直接書き込む方法で以下で777で作成されませんか? umask(0); mkdir($path, 0777);
P0Po

2016/12/13 13:21

はい、どうにも755で作成されてしまいます。
guest

0

変数と違って、定数は展開されないですね。

bash

1> php -r 'print(PATH_SEPARATOR);' 2: 3> php -r 'print("PATH_SEPARATOR");' 4PATH_SEPARATOR

定数を文字列から除外して個別に結合していった方が良さそうです。

$path = "DS.DS.IPアドレス.DS.Share.DS.test"; // ↓ $path = DS.DS."IPアドレス".DS."Share".DS."test";

投稿2016/12/10 07:00

attakei

総合スコア2738

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

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

P0Po

2016/12/12 01:43

個別に結合した結果、作成できませんのメッセージが表示されました。 $pathをvar_dumpしてみたところ、しっかりパスが表示されたので猛打いないはずなのですが…
attakei

2016/12/12 02:11

「$pathに結合されたものが入っているか」と「そのパスは書き込めるものなのか」は別問題となります。 まず、その表示されているパスが本当に意図したものなのかを確認してみてください。 単純に結合すると、 //127.0.0.1/Share/test のようにルート直下にIPアドレスのフォルダを作ることになると思いますが、これであっていますか? また、phpのmkdirは何も指定しないと、親階層から全て作成することができないみたいです。 マニュアルを読んで、必要なパラメータを設定してください。 http://php.net/manual/ja/function.mkdir.php
guest

0

mkdir()する前に、umask(0);を挿入してみてください。
PHP: umask - Manual
http://php.net/manual/ja/function.umask.php

それでもダメなら、ディレクトリ作成先ディレクトリのオーナー/グループを、
apacheなどwebサーバープロセスのものに変更します。
シェル上からchown/chgrpコマンドを使います。

参考:phpのmkdir関数によるディレクトリ作成 - 電子書庫の構築
http://kowloonet.org/memo/lib/index.php?php%A4%CEmkdir%B4%D8%BF%F4%A4%CB%A4%E8%A4%EB%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8%A5%EA%BA%EE%C0%AE

投稿2016/12/08 03:56

編集2016/12/08 03:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

P0Po

2016/12/10 06:25

試してみても、同じでした… どうやら「DS.DS.IPアドレス.DS.Share.DS.test」というフォルダが、PHPファイルがあるところと同じ場所に作成されているようです。 DSをディレクトリパスとして認識していないのでしょうか?
退会済みユーザー

退会済みユーザー

2016/12/12 00:43

「作成されていない」との話だったのでディレクトリ作成にまつわる情報提供をしましたが、「DS.DS.IPアドレス.DS.Share.DS.test」というディレクトリが作られているということでは話が変わってきます。attakei氏の回答どおり修正してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問