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

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

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

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

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

解決済

1回答

1267閲覧

phpspreadsheetでネットワーク上のファイルを開きたい

hatsuzo

総合スコア56

PHP

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

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

1クリップ

投稿2019/02/13 07:08

編集2019/02/13 07:52

Windows Server上で動作するphpで、phpspreadsheetを動かそうとしています。
何とかインストールを終え、同じフォルダ内のExcelの内容を取得するところまでは出来ました。
しかし、別のWindowsServerのネットワーク越しのパスを指定したところ、動作しません。
ファイル名が日本語のせいかと思い、下記のように英文字にしてみたのですが、結果は同じでした。
下記のように、UNC名(\サーバー名\共有名\サブフォルダ名\ファイル名)で書いているつもりなのですが、通りません。画面上はエラーも返ってきません。
実行は、タスクスケジューラで行いたいので、

php test.php

のように、コマンドラインで管理者アカウントで実行しています。
対象フォルダも管理者のアクセス権は付いています。

php

1<?php 2require '../../php/vendor/autoload.php'; 3use PhpOffice\PhpSpreadsheet\Settings; 4use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; 5use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter; 6use PhpOffice\PhpSpreadsheet\Writer\CSV as CSVWriter; 7 8// ExcelBookを開く 9$reader = new XlsxReader(); 10// $spreadsheet = $reader->load('catch01.xlsx'); // OK 11$spreadsheet = $reader->load('\\mitsunari\joho\test\catch01.xlsx'); 12$sheet = $spreadsheet->getSheet(0); 13$yy = $sheet->getCell('B2')->getValue(); 14$mm = $sheet->getCell('F2')->getValue(); 15$sonm = $sheet->getCell('M2')->getValue(); 16$sonm = mb_convert_encoding($sonm, "SJIS", "UTF-8"); 17print $yy.'/'.$mm.':'.$sonm; 18 19?>

別の処理で、
$basepath = '\mitsuhide\joho\test';
$dir = new DirectoryIterator($basepath);
のようにUNC名は通ったのですが、
そもそもphpspreadsheetはこうした使い方は対応していないのでしょうか?

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

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

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

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

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

m.ts10806

2019/02/13 07:34

コードはマークダウンのcode機能を利用してください。 また、file_exists()でそのファイルを指定するとどうなりますか?
hatsuzo

2019/02/13 08:26

コメント有難うございます。 ```php if (file_exists($filename)) { echo "$filename が存在します"; } ``` と入れたら、存在します、という値が返ってきました。入力間違いだったようです。 しかし、日本語のファイル名に変えたら、値が返らなくなりました。 邪道だと思いますが、Windows上のコマンドラインで使うことを前提としているので、 phpのソースはSJISで、php.iniも default_charset = "Shift_JIS" としてあります。 このせいでファイル名が正しく扱われないのでしょうか?
hatsuzo

2019/02/13 09:19

補足します。 表題と知りたい内容が違ってしまい、かつ言葉足らずで申し訳ないです。 file_exists は、英数字のファイル名でも日本語のファイル名でも存在が確認できます。 英数字のファイル名ですと、その後のload、getSheet、getValueといった処理も動作するのですが、 日本語のファイル名ですと、反応しないという意味です。
guest

回答1

0

自己解決

結局、copyでカレントディレクトリに半角文字のファイル名にリネームしてコピーして処理をしたら動作しました。
そもそも日本語のファイル名は使いたくは無かったのですが、エンドユーザが入力するファイルなので致し方のないところです。また、sjisを使っているのも問題なんでしょうね。utfを使っていれば動くのかもしれませんが、Windowsサーバー上での連携処理なので、Sjisを使っています。

投稿2019/02/14 23:32

hatsuzo

総合スコア56

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

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

papinianus

2019/02/15 01:06

> エンドユーザが入力するファイル 作るアプリの種類によっても違うと思いますが、同じくphp/win/sjis環境で、アップロードされたファイルには英字からなる名前を付与し、ユーザが送信した際の名前と付与した名前の対応を別に管理して対応してました(主に5c文字対応のため)。
hatsuzo

2019/02/18 10:14

コメント有難うございます。 アプリと言っても、エンドユーザが入力するExcelで、共有フォルダを見て入力する類のものなので、ファイル名を変える訳にはいかないので困ってます。なんとかリネームして一つずつ処理して対応はできましたが、特定の文字だとコピーも出来ないので、力ずくになりますが、別の方法でコピーするという方法になってしまいました。本当に大丈夫かどうか不安が残ります。
papinianus

2019/02/19 00:08

アプリ次第ですからね、なんとも。私がやったわけではないですが、前記対応をした開発では、phpに5cを読めるパッチをあててコンパイルし直してました(パッチは公開されています。phpにマージされてないだけで)。安心を得るにはこれくらいやるしかないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問