人に聞けない痔の悩み、これでスッキリ >>

XAMPP1.7.1を使用し、社内のWEB SERVERとして運用しています。
XAMPPのバージョンアップ(XAMPP5.6.15)を行ったところ下記問題が発生しました。
PHPプログラム内で別のサーバの共有ホルダを確認するために
file_existsを使用しているのですが
特定の共有ホルダ名のみ認識できません。(5C問題の漢字は含まれていません)
アドバイスをお願いいたします。

認識できない共有ホルダ名
//DATASERVER/輸出
//DATASERVER/営業

認識できる共有ホルダ名
//DATASERVER/管理
//DATASERVER/製造
//DATASERVER/管理/輸出/営業

$dir='//DATASERVER/輸出/';
if (file_exists( $dir )==true)
echo "ファイルが存在する!!(".$dir.')';
else
echo "ファイルが存在しない!!(".$dir.')';

$dir='//DATASERVER/営業/';
if (file_exists("//KHOST1/輸出/")==true)
echo "ファイルが存在する!!(".$dir.')';
else
echo "ファイルが存在しない!!(".$dir.')';

$dir='//DATASERVER/管理/輸出/営業/';
if (file_exists( $dir )==true)
echo "ファイルが存在する!!(".$dir.')';
else
echo "ファイルが存在しない!!(".$dir.')';

このQ&Aに関連する最新のQ&A

A 回答 (8件)

すみません。


昨日、Apacheの権限の問題だと確信していたのですが、ふと気になったことがあり今日調べて見ました。
Apacheを経由しないでPHPから直接アクセスしたらどうなるか?
と言うことです。
結果、元のように「輸出」「営業」フォルダにはアクセス出来ませんでした。
さらに詳しく調べた結果、「出」「営」が含まれているとアクセス出来ない事がわかりました。
単純にフォルダを作成し、共有してアクセスするだけで「アクセスを拒否」されます。

権限の問題でも無く、フォルダの実際の位置も関係ありませんでした。
「d:\営業」を作成し、「営業」を共有し「\\localhost\営業」としてアクセスすると拒否される。
「d:\zzz\営業」を作成し、「営業」を共有し「\\localhost\営業」としてアクセスすると拒否される。
「d:\zzz\営業」を作成し、「zzz」を共有し「\\localhost\zzz\営業」としてアクセスすると拒否されない。

どうやら、「\\コンピューター名\フォルダ名」とした場合におかしな動作をするようです。
そこで色々調べてみたのですが、対処方法が全く見つかりませんし、不具合情報としても上がっていませんでした。

また、
>ファイルが存在する!!(//10.1.75.76/C$/輸出)JPG
>ファイルが存在する!!(//10.1.75.76/C$/営業/)JPG
>ファイルが存在する!!(//10.1.75.74/D$/輸出)JPG
>ファイルが存在する!!(//10.1.75.74/D$/営業/)JPG
管理共有を使うとアクセス出来たようですが、個人的には「管理共有」を使うのもあまり良くないと思っています。

なので、
任意のフォルダを作成し、そのフォルダを共有する。
アクセスするフォルダはその中に作成する。
では、ダメなのでしょうか?

1:C:\docsフォルダを作成。(任意の半角英字)
2:「docs」フォルダを共有する。
3:「docs」フォルダの中に、「輸出」「営業」フォルダを作成する。
4:「//10.1.75.76/docs/輸出」「//10.1.75.76/docs/営業」でアクセスする。

根本的な原因がわからないのでスッキリしないのですが、セキュリティーなども考慮するとこれ以上なにかをやってもセキュリティーを甘くしてしまう危険性もあるので、この方法がベストでは無いかと判断しました。
検討してみてください。
    • good
    • 1
この回答へのお礼

gao57830様
いろいろと調査していただきありがとうございました。
ご提案の内容については検討してみますが会社内のデータ共有サーバーの為簡単に変更するのは難しいと思います。
通常、フォルダー名は日本語を使用せずにアルファベットを使用する方が良いと記載されているサイトもありましたが今後はそのようにしていきたいと思っています。
最初に記載した通りXAMPP1.7.1を使用した場合は今回のトラブルは無く、現状もそのシステムを使用しております。Apache2.2.11以降、PHP5.2.9以降で何か変更がなされたのか、または問題ないのが問題で修正されたのかもしれません。今回の問題をネットで検索するのですが同様のドラブル情報を見つける事が出来ずに「教えて!goo」に相談したしだいです。最初は私の無知による簡単な設定ミスかと思っていましたが、gao57830様でも再現したことを伺って残念ですが安心しました。いろいろと私の知らないアプローチの方法を教えていただきありがとうございました。もし新しい情報がありましたらご連絡ください。ありがとうございました。

お礼日時:2016/01/21 19:14

>ファイルが存在する!!(//10.1.75.76/C$/営業/)JPG


これは、「管理共有」と呼ばれるもので、実際には「C:\営業」でアクセスしているのとほぼ同じ事になります。
それに対し、
>ファイルが存在しない!!(//10.1.75.76/営業/)JPG
これは、ネットワーク経由でアクセスしている事になります。

しかし、
>ファイルが存在しない!!(//10.1.75.74/D$/営業/)JPG
この場合は、コンピューターが異なるので管理共有でもネットワークアクセスとなります。

フォルダの権限に問題が無い場合、Apacheの権限はどうでしょう?
Apacheをサービスに登録してあると思いますが、その際のアカウントを確認してみてください。
通常、サービスに登録された場合のアカウントは、「Local System」となります。
これを、現在ログインしているアカウントに変更してみてください。

また、ファイアーウォールでポート番号か「httpd.exe」は通過するように設定してありますよね?
    • good
    • 1
この回答へのお礼

gao57830様
毎回、貴重なアドバイス感謝しております。

ご指導いただきましたApacheのログオンアカウントを確認したところ
Server PCのログインユーザー以外のユーザアカウントが設定されていました。そこで「Local System」変更すると認識されていたフォルダも認識されなくなりました。そこでログイン中のユーザアカウントを設定したところ下記の様に改善されました。この状況であればPHPのソースファイルを変更DataServerのフォルダ位置を追加する事で使用可能となります。
サービス登録を
ファイルが存在しない!!(//10.1.75.76/輸出)JPG
ファイルが存在しない!!(//10.1.75.76/営業/)JPG
ファイルが存在する!!(//10.1.75.76/C$/輸出)JPG
ファイルが存在する!!(//10.1.75.76/C$/営業/)JPG
ファイルが存在しない!!(//10.1.75.74/輸出)JPG
ファイルが存在しない!!(//10.1.75.74/営業/)JPG
ファイルが存在する!!(//10.1.75.74/D$/輸出)JPG
ファイルが存在する!!(//10.1.75.74/D$/営業/)JPG

ファイアーウォールについては無効に設定していますがその他に確認する内容はありますか?

宜しくお願い致します。

お礼日時:2016/01/20 13:20

前回の結果から、PHPの問題では無くApacheの権限かネットワーク権限、フォルダの権限の問題ですね。


アクセス出来るフォルダと出来ないフォルダがあるので、フォルダの権限のような気がします。
フォルダの右クリックで、「共有」タブや「セキュリティ」タブの内容をアクセス出来るフォルダと出来ないフォルダを良く比較してみてください。
    • good
    • 0
この回答へのお礼

gao57830様
アドバイスありがとうございます。

前回報告いたしました下記内容についてもフォルダ権限の問題なのでしょうか?

>サーバーのフォルダの位置を追加する事で少し改善されました。
>改善されたのはApache、PHPがインストールされているPC(10.1.75.76)側です。
>ファイルが存在しない!!(//10.1.75.76/輸出)JPG
>ファイルが存在しない!!(//10.1.75.76/営業/)JPG
>ファイルが存在する!!(//10.1.75.76/C$/輸出)JPG
>ファイルが存在する!!(//10.1.75.76/C$/営業/)JPG

「共有」タブや「セキュリティ」タブの内容を確認しても差異はありません。他の方法で確認する方法はありませんか?

アドバイスをお願いいたします。

お礼日時:2016/01/20 09:01

当初は、「日本語エンコード」の問題かと思っていましたが、不安定に日本語を認識していないのが疑問でした。


前回の「mkdir()」で「No such file or directory」のエラーが返ってくるのが原因のように感じたので、そのあたりを調べてみました。
例えば、「/製造」フォルダが無い状態で、「/製造/輸出」を作ろうとした場合にこのエラーになるようです。

そこで思ったのですが、サーバーのフォルダは「共有」したフォルダですよね?
サーバーの実際のフォルダの位置が認識するものと認識しないもので異なっている事はありますか?

例えば、「//10.1.75.76/輸出」「//10.1.75.76/営業」フォルダですが、
サーバーの実際のフォルダの位置を管理者共有を使って認識させるとどうなるでしょうか?
サーバーのフォルダの位置が「C:\data\営業」だったとすると、

$dir='//10.1.75.76/C$/data/営業';
if (file_exists( $dir )==true)
echo "ファイルが存在する!!(".$dir.')';
else
echo "ファイルが存在しない!!(".$dir.')';
※予めエクスプローラーで「//10.1.75.76/C$/data/営業」にアクセス出来る事を確認してから行ってください。

また、解決しない場合、以下も試してみてください。

$dir='//10.1.75.76/営業';
mkdir( $dir, 0777, TRUE );
if (file_exists( $dir )==true)
echo "ファイルが存在する!!(".$dir.')';
else
echo "ファイルが存在しない!!(".$dir.')';
※これで成功した場合、本来の「営業」フォルダとは別の場所にフォルダが作成されています。
    • good
    • 0
この回答へのお礼

gao57830様
アドバイスありがとうございます。

サーバーのフォルダの位置を追加する事で少し改善されました。
改善されたのはApache、PHPがインストールされているPC(10.1.75.76)側です。
ファイルが存在しない!!(//10.1.75.76/輸出)JPG
ファイルが存在しない!!(//10.1.75.76/営業/)JPG
ファイルが存在する!!(//10.1.75.76/C$/輸出)JPG
ファイルが存在する!!(//10.1.75.76/C$/営業/)JPG

データサーバーとして実運用しているPC(10.1.75.74)側は改善できません。
ファイルが存在しない!!(//10.1.75.74/輸出)JPG
ファイルが存在しない!!(//10.1.75.74/営業/)JPG
ファイルが存在しない!!(//10.1.75.74/D$/輸出)JPG
ファイルが存在しない!!(//10.1.75.74/D$/営業/)JPG

サーバーのフォルダは共有したフォルダです。
マイコンピュータ画面で\\10.1.75.76または,\\10,1,75,74を入力すると
輸出、営業の共有フォルダが表示されます。

>$dir='//10.1.75.76/営業';
>mkdir( $dir, 0777, TRUE );
>if (file_exists( $dir )==true)
を実行してみましたが結果は下記のように表示されました。
Warning: mkdir(): Invalid argument in C:\www\Apache24\htdocs\test.php on line 240
ファイルが存在しない!!(//10.1.75.74/営業)

アドバイスをお願いいたします。

お礼日時:2016/01/19 15:38

>//10.1.75.76/管理/


>//10.1.75.76/製造/
>//10.1.75.76/製造/輸出/
これらは、file_existsでも認識できたフォルダですね。

>File exists(ファイルが存在します)
なので、正常なメッセージです。

>//10.1.75.76/営業/
>//10.1.75.76/輸出/
このフォルダは、file_existsでも認識しなかったフォルダですね。

>No such file or directory(そのようなファイルやディレクトリは存在しません)
となっています。
これがおかしいですね。フォルダを作成しようとしているのに存在しないとは?
>$dir='//10.1.75.76/輸出';
これでもダメだったのですか。


私のパソコンには、XAMPP(7.0.0)がインストールされているのですが、「C:\輸出」フォルダを作成し、

$dir='//localhost/C$/輸出/';
if (file_exists( $dir )==true)
echo "ファイルが存在する!!(".$dir.')<BR>';
else
echo "ファイルが存在しない!!(".$dir.')<BR>';

これを実行すると、「ファイルが存在する」となりました。
フォルダを削除して、mkdirを実行するとフォルダが作成されますし、フォルダがある状態で実行すると「 File exists」になり、正常に動作します。

やはり、「No such file or directory」が異常ですね。


$dir='//127.0.0.1/輸出/';
$dir=mb_convert_encoding($dir, 'CP932', 'SJIS');
if (file_exists( $dir )==true)
echo "フォルダ作成成功!!(".$dir.')';
else
echo "フォルダ作成失敗!!(".$dir.')';

これでもダメでしょうか?
    • good
    • 0
この回答へのお礼

gao57830様
アドバイスありがとうございます。

ご指導いただきました内容
$dir=mb_convert_encoding($dir, 'CP932', 'SJIS');
を実施しましたが状況に変化はありません。
そちらのシステムでは問題ないとの事ですね。

現在使用しているXAMPP1.7.1では問題ないのですが
xampp1.7.2以降、いくつかのバージョンを確認しましたが
全てすべて同じように特定の漢字フォルダが認識できません。
xampp7.0.0は未確認ですが
同じ漢字が入っている下記フォルダは認識できることから
漢字フォルダ名の問題でもないように思います。
//10.1.75.76/製造/輸出/
ただ、コンピュータ名の次のフォルダ名の漢字によって認識されたりされなかったりしているのではないかと感じています。

アドバイスをお願いいたします。

お礼日時:2016/01/19 07:41

>mkdir c:\輸出


>mkdir c:\営業
>どちらも ”既に存在します。”と表示されます。
いえ、そういう意味ではなく、PHPからネットワーク経由で作成したらどうなるかと言うことです。

つまり、
$dir='//DATASERVER/輸出/';
if (mkdir( $dir )==true)
echo "フォルダ作成成功!!(".$dir.')';
else
echo "フォルダ作成失敗!!(".$dir.')';

file_existsで認識しないので、どこかで文字化けなどを起こしているのが原因だとすれば、mkdirが成功し文字化けしたフォルダが作成される。
文字化けなどが発生していなければ、mkdirは失敗しフォルダは作成されない。
この場合、file_existsに問題がある。
このように、file_exists自体に問題があるのか、別のところに問題があるのか切り分けをしたいと言うことです。

※サーバーに不要なフォルダが作成されてはまずい場合がありますので、自身のパソコンでテストしてみてはどうでしょうか?
$dir='//127.0.0.1/輸出/';
if (mkdir( $dir )==true)
echo "フォルダ作成成功!!(".$dir.')';
else
echo "フォルダ作成失敗!!(".$dir.')';

また、作成出来たら認識出来るかも試してみてください。
$dir='//127.0.0.1/輸出/';
if (file_exists( $dir )==true)
echo "ファイルが存在する!!(".$dir.')';
else
echo "ファイルが存在しない!!(".$dir.')';

追記
関係ないとは思いますが、
$dir='//127.0.0.1/輸出/';
  ↓
$dir='//127.0.0.1/輸出'; ←最後の'/'を取る。
でも同じでしょうか?
    • good
    • 0
この回答へのお礼

gao57830様
早速のアドバイスありがとうございます。

phpでmkdirを実行した結果、下記ようになりました。
Warning: mkdir(): No such file or directory in C:\www\Apache24\htdocs\test.php on line 168
フォルダ作成失敗!!(//10.1.75.76/営業/)JPG

Warning: mkdir(): No such file or directory in C:\www\Apache24\htdocs\test.php on line 176
フォルダ作成失敗!!(//10.1.75.76/輸出/)JPG

Warning: mkdir(): File exists in C:\www\Apache24\htdocs\test.php on line 184
フォルダ作成失敗!!(//10.1.75.76/管理/)JPG

Warning: mkdir(): File exists in C:\www\Apache24\htdocs\test.php on line 192
フォルダ作成失敗!!(//10.1.75.76/製造/)JPG

Warning: mkdir(): File exists in C:\www\Apache24\htdocs\test.php on line 200
フォルダ作成失敗!!(//10.1.75.76/製造/輸出/)JPG

この結果から”営業”、”輸出”は文字化けなのでしょうか?

また

$dir='//10.1.75.76/輸出';にしても結果に変化はありません。

お礼日時:2016/01/18 19:36

間違っているとは思えませんが・・・。


サーバーの文字コードとPHPの文字コードは同じですよね?

勝手なことは出来ないかもしれませんが、例えば
>認識できない共有ホルダ名
>//DATASERVER/輸出
このフォルダを、「mkdir」で作成してみたらどうなるか?
戻り値が、Trueか?Falseか?
を試してみると何かわかるかも?
    • good
    • 0
この回答へのお礼

gao57830様
アドバイスありがとうございます。

mkdir c:\輸出
mkdir c:\営業
どちらも ”既に存在します。”と表示されます。

念のため別のサーバに同じフォルダをc:\の下に作成して確認してみましたが結果は同じです。
サーバーのosはwindows server 2012です。

認識できない共有ホルダ名
//10.1.75.76/輸出
//10.1.75.76/営業

認識できる共有ホルダ名
//10.1.75.76/管理
//10.1.75.76/製造
//10.1.75.76/製造/輸出/

アドバイスをお願いいたします。

お礼日時:2016/01/18 11:21

ちょっと気になったので・・・。


漢字ばかり気にされていますが、そもそも「フォルダのアクセス権限」は問題無いんですよね?
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。ご指摘の内容については各フォルダのプロパティ⇒セキュリティの内容は同じです。ちなみにDATASERVERの下に新たなフォルダ”輸”と”出”を作成し共有設定したところ、”輸”はファイルが存在し、”出”はファイルが存在しない結果となりました。

お礼日時:2016/01/15 08:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング