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

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

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

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

PHP

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

samba

Samba(サンバ)とは、UNIX系OSにおいてSMBを用いたサービスを提供するためのソフトウェアです。ネットワークを通じて、ファイル共有及びプリンタ共有などのサービスをWindowsマシンへと提供します。ライセンス体系GPLに基づきフリーソフトウェアとして公開されています。

Q&A

解決済

3回答

2936閲覧

phpでファイル一覧を表示するところで困っています

Takahito_TTT

総合スコア12

Apache

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

PHP

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

samba

Samba(サンバ)とは、UNIX系OSにおいてSMBを用いたサービスを提供するためのソフトウェアです。ネットワークを通じて、ファイル共有及びプリンタ共有などのサービスをWindowsマシンへと提供します。ライセンス体系GPLに基づきフリーソフトウェアとして公開されています。

0グッド

0クリップ

投稿2017/01/18 05:59

編集2017/01/18 07:11

###phpでファイル一覧を表示するプログラムを作っています
現在phpで、
ある特定のディレクトリのファイルの一覧を
表示するプログラムを作成しています。

下のソースを実行すると、カレントディレクトリ内の
ファイル一覧は表示することができるのですが

php

1<?php 2if ($handle = opendir('.')) { 3 while (false !== ($entry = readdir($handle))) { 4 if ($entry != "." && $entry != "..") { 5 echo "$entry\n"; 6 } 7 } 8 closedir($handle); 9} 10?>

下のように、
/samba/shareを参照するようにするとファイル一覧を表示することができません。

php

1<?php 2if ($handle = opendir('/samba/share')) { 3 while (false !== ($entry = readdir($handle))) { 4 if ($entry != "." && $entry != "..") { 5 echo "$entry\n"; 6 } 7 } 8 closedir($handle); 9} 10?>

どのように記述したらファイル一覧が表示できるのでしょうか

###補足情報(言語/FW/ツール等のバージョンなど)
cent os 7に、sambaとphpとapachをインストールして行っています

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

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

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

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

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

guest

回答3

0

ベストアンサー

パーミッション以外の確認事項

  • SELinuxの設定は適切ですか?

SELinuxが有効になっている場合は、SELinuxでアクセスが拒否されている可能性があります。
/samba/home 以下に対して適切な設定を行ってください。
または、不要であればSELinuxを無効にして試してください。
(Qiita) CentOS7 SELinuxの無効化手順

  • php.ini などでopen_basedirが設定されていて phpからアクセス可能なディレクトリが制限されてませんか?

(php.net) コア php.ini ディレクティブに関する説明

php.ini などで open_basedir の設定を変更する

;open_basedir =

以下のようにphpinfo()で確認できます。

php

1<?php 2phpinfo(); 3

投稿2017/01/18 07:23

編集2017/01/18 07:35
Y.H.

総合スコア7914

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

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

Takahito_TTT

2017/01/18 07:54

SELinuxの無効を試してみたところきちんと表示させることができました ありがとうございました ちなみになんですけど、open_basedirは Local Value、Master Valueともにno_valueでした この場合はopen_basedirの設定は特に気にしなくても大丈夫ですか?
Y.H.

2017/01/18 07:55

はい、open_basedirはこのままで構いません。パーミッションが適切であればすべてのディレクトリにアクセス可能です。
Takahito_TTT

2017/01/18 08:01

回答ありがとうございました。 引き続き開発することができそうです
guest

0

ini_set('display_errors',1);
を上に入れてみて
failed to open dir: Permission denied in
などが出力されませんか

投稿2017/01/18 07:26

date

総合スコア1820

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

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

Y.H.

2017/01/18 07:28

開発時は ini_set('error_reporting', E_ALL); もセットで記述しておいた方がいいですね。
Takahito_TTT

2017/01/18 07:38

dateさん、Y.H.さん ご指摘ありがとうございました ini_set('display_errors'1);をいれてみたら failed to open dir: Permission denied in と出力されました
Y.H.

2017/01/18 07:43

「Permission denied」=「アクセスが拒否されました」なので何らかの権限がなくアクセスが拒否されてます。 パーミッションで拒否されている場合も私の回答に記載しているのものに該当する場合もこのメッセージが表示されます。 私の回答に記載している事項も確認ください。
Takahito_TTT

2017/01/18 08:04

dateさん 回答ありがとうございました。 問題解決しました
guest

0

出力されるエラーはありますか?
$handleの中身を見てみたら?
ディレクトリのパーミッションは適切ですか?

投稿2017/01/18 06:02

zico_teratail

総合スコア907

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

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

Takahito_TTT

2017/01/18 06:34

回答ありがとうございます。 phpの勉強を始めたばかりなので よくわからないのですが $handleの中身を見るために 『echo "$handle\n";』 を先ほどのコードの下に付け加えて ブラウザで実行してみたら 『Resource id #3』というのが表示されました 出力されるエラーとディレクトリのパーミッションについては よくわかりません、すみません
zico_teratail

2017/01/18 06:54

いや「よくわかりません」じゃなくて、分からなかったらすぐググってくださいよ・・・ パーミッションはFTPソフトなどで簡単に確認できます。
Takahito_TTT

2017/01/18 07:02

パーミッションの確認してみました。 表示したいディレクトリには、11ファイルあるのですが そのうちの10ファイルが774で 残り1ファイルが644でした。 また、カレントディレクトにあるファイルは 12ファイルがあるのですがすべて644でした。
zico_teratail

2017/01/18 07:10

/samba/share は絶対パスですか? それともこのプログラムから見た相対パスですか?
Takahito_TTT

2017/01/18 08:03

zico_teratailさん 回答ありがとうございました 問題解決しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問