teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

7

追記

2016/01/07 08:44

投稿

orange0190
orange0190

スコア1698

title CHANGED
File without changes
body CHANGED
@@ -55,10 +55,10 @@
55
55
  $sharedFilesの中身
56
56
  ```
57
57
  array (size=2)
58
- 0 =>
58
+ 0 => (ソフトフォルダの情報)
59
59
  array (size=0)
60
60
  empty
61
- 1 =>
61
+ 1 => (テストフォルダの情報)
62
62
  array (size=4)
63
63
  'FILE_TYPE' => string 'dir' (length=3)
64
64
  'FILE_NM' => string 'eスト' (length=7)

6

実行結果を追記

2016/01/07 08:43

投稿

orange0190
orange0190

スコア1698

title CHANGED
File without changes
body CHANGED
@@ -43,4 +43,28 @@
43
43
  return $info;
44
44
  }
45
45
 
46
+ ```
47
+
48
+ ###再追記 具体的な実行例
49
+ 列挙対象のフォルダ
50
+ \\hoge\fuga\6
51
+
52
+ 対象フォルダ内には「ソフト」「テスト」という2のフォルダが存在している
53
+
54
+ 実行結果
55
+ $sharedFilesの中身
56
+ ```
57
+ array (size=2)
58
+ 0 =>
59
+ array (size=0)
60
+ empty
61
+ 1 =>
62
+ array (size=4)
63
+ 'FILE_TYPE' => string 'dir' (length=3)
64
+ 'FILE_NM' => string 'eスト' (length=7)
65
+ 'PARENT_DIR' => string '\\hoge\fuga\6' (length=17)
66
+ 'SUB_FILES' =>
67
+ array (size=0)
68
+ empty
69
+
46
70
  ```

5

コード修正

2016/01/07 07:30

投稿

orange0190
orange0190

スコア1698

title CHANGED
File without changes
body CHANGED
@@ -36,7 +36,7 @@
36
36
  $data['FILE_TYPE'] = 'dir';
37
37
  $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis-win');
38
38
  $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf-8', 'sjis-win');
39
- $data['SUB_FILES'] = $this->__getSharedFiles($file);
39
+ $data['SUB_FILES'] = getSharedFiles($file);
40
40
  }
41
41
  $info[] = $data;
42
42
  }

4

コード修正

2016/01/07 07:01

投稿

orange0190
orange0190

スコア1698

title CHANGED
File without changes
body CHANGED
@@ -29,13 +29,13 @@
29
29
  $pathInfo = pathinfo($file);
30
30
  if(is_file($file)) {
31
31
  $data['FILE_TYPE'] = 'file';
32
- $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis');
32
+ $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis-win');
33
- $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf-8', 'sjis');
33
+ $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf-8', 'sjis-win');
34
34
  $data['SUB_FILES'] = '';
35
35
  } else if(is_dir($file)) {
36
36
  $data['FILE_TYPE'] = 'dir';
37
- $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis');
37
+ $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis-win');
38
- $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf-8', 'sjis');
38
+ $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf-8', 'sjis-win');
39
39
  $data['SUB_FILES'] = $this->__getSharedFiles($file);
40
40
  }
41
41
  $info[] = $data;

3

コード修正

2016/01/07 07:00

投稿

orange0190
orange0190

スコア1698

title CHANGED
File without changes
body CHANGED
@@ -21,24 +21,22 @@
21
21
 
22
22
  function getSharedFiles($path){
23
23
  setlocale(LC_ALL, 'ja_JP.UTF-8');
24
- $search = str_replace(DS, '/', rtrim($path, DS) . DS . '*');
24
+ $search = str_replace(DS, '/', rtrim($path, DS) . DS . '*'); //DSはDIRECTORY_SEPARATOR
25
25
  $files = glob($search);
26
26
  $info = array ();
27
27
  foreach($files as $file) {
28
28
  $data = array ();
29
29
  $pathInfo = pathinfo($file);
30
- if(is_file($fileSjis)) {
30
+ if(is_file($file)) {
31
31
  $data['FILE_TYPE'] = 'file';
32
32
  $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis');
33
- $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf8', 'sjis');
33
+ $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf-8', 'sjis');
34
34
  $data['SUB_FILES'] = '';
35
- } else if(is_dir($fileSjis)) {
35
+ } else if(is_dir($file)) {
36
36
  $data['FILE_TYPE'] = 'dir';
37
37
  $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis');
38
- $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf8', 'sjis');
38
+ $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf-8', 'sjis');
39
39
  $data['SUB_FILES'] = $this->__getSharedFiles($file);
40
- } else {
41
- var_dump('else');
42
40
  }
43
41
  $info[] = $data;
44
42
  }

2

ソースコード追記

2016/01/07 06:58

投稿

orange0190
orange0190

スコア1698

title CHANGED
File without changes
body CHANGED
@@ -12,4 +12,37 @@
12
12
  PHP 5.6.12
13
13
  CakePHP 2.7.7
14
14
 
15
- 以上、よろしくお願いします。
15
+ 以上、よろしくお願いします。
16
+
17
+ ###追記 ソースコード
18
+ ```PHP
19
+ $path = SHARED_FOLDER . $no; // SHARED_FOLDERは列挙するフォルダのパス,$noはIDのようなもの
20
+ $sharedFiles = getSharedFiles($path);
21
+
22
+ function getSharedFiles($path){
23
+ setlocale(LC_ALL, 'ja_JP.UTF-8');
24
+ $search = str_replace(DS, '/', rtrim($path, DS) . DS . '*');
25
+ $files = glob($search);
26
+ $info = array ();
27
+ foreach($files as $file) {
28
+ $data = array ();
29
+ $pathInfo = pathinfo($file);
30
+ if(is_file($fileSjis)) {
31
+ $data['FILE_TYPE'] = 'file';
32
+ $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis');
33
+ $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf8', 'sjis');
34
+ $data['SUB_FILES'] = '';
35
+ } else if(is_dir($fileSjis)) {
36
+ $data['FILE_TYPE'] = 'dir';
37
+ $data['FILE_NM'] = mb_convert_encoding($pathInfo['basename'], 'utf-8', 'sjis');
38
+ $data['PARENT_DIR'] = mb_convert_encoding($pathInfo['dirname'], 'utf8', 'sjis');
39
+ $data['SUB_FILES'] = $this->__getSharedFiles($file);
40
+ } else {
41
+ var_dump('else');
42
+ }
43
+ $info[] = $data;
44
+ }
45
+ return $info;
46
+ }
47
+
48
+ ```

1

誤字修正

2016/01/07 06:39

投稿

orange0190
orange0190

スコア1698

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ###前提・実現したいこと
2
2
  現在、仕事上でPHP(CakePHP)を用いてwebアプリケーションを作成しています。
3
- そのwebアプリケーションの中で、実行するPHPファイルが置かれているサーバとは、別のサーバに共有フォルダを置き、そのフルダ内のファイルおよびフォルダを列挙する機能があります。
3
+ そのwebアプリケーションの中で、実行するPHPファイルが置かれているサーバとは、別のサーバに共有フォルダを置き、そのフルダ内のファイルおよびフォルダを列挙する機能があります。
4
4
 
5
5
  ###発生している問題
6
6
  共有先はwindowsであり、ファイル名は文字コードがsjis-winとなっているため、ファイル名にいわゆる「ダメ文字」が含まれている場合に、`pathinfo()`等が正しく取得できません。