OneDriveエラー対応

OneDrive管理下のフォルダにPHPはアクセスできない

更新日:2019/08/26

先日、開発環境にCode Snifferをインストールしました。
ですが整形をしようとすると、ファイルが無いと言われてしまう。

ERROR: The file "C:\Users\ptma\OneDrive\・・・\xxxx.php" does not exist.

なぜ?

私は、OneDriveを、ソースのバックアップ先として使用しています。
その際、フォルダ構成としてOneDriveフォルダのしたに、ソースが配置されます。

そしてどうやら、PHPはOneDrive管理下のソースにアクセスできないようです。

 

PHPでOneDriveフォルダにアクセスするテスト

調査したPHPバージョン

C:\Users\aaa>php -v
PHP 7.3.7 (cli) (built: Jul 3 2019 14:34:10) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.7.0RC2, Copyright (c) 2002-2019, by Derick Rethans

OneDriveの外で、PHPを使ってフォルダ内容を表示してみます。

C:\Users\aaaa>php -r "print_r(scandir('./', 1));"
Array
(
[0] ⇒ 新しいフォルダー
[1] ⇒ スタート メニュー
・・・
[13] ⇒ abc3.txt
[14] ⇒ abc2.txt
[15] ⇒ abc1.txt
・・・
[27] ⇒ OneDrive
・・・
[63] ⇒ ..
[64] ⇒ .
)

表示できました。

次に、OneDrive内でフォルダ内容を表示してみます。

C:\Users\aaaa>cd OneDrive

C:\Users\aaaa\OneDrive>php -r "print_r(scandir('./', 1));"
PHP Warning: scandir(./,./): PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. scandir() Command line code:1

Warning: scandir(./,./): t@C܂̓fBNgĉ̓|Cgł͂܂B (code: 4390) in Command line code on line 1
・・・
Call Stack:
0.1921 391520 1. {main}() Command line code:0
0.1921 391520 2. scandir() Command line code:1

エラーが出た

では、フォルダをOneDriveの外に戻して、ファイルを読み込んでみます。

C:\Users\aaaa>php -r "var_dump(file('./abc1.txt'));"
Command line code:1:
array(1) {
[0] ⇒
string(12) "text is abc1"
}

ファイルの中身が表示されました。

では次に、同じファイルをOneDrive内にコピーして、ファイル内容を表示してみます。

C:\Users\aaaa>copy abc1.txt .\OneDrive
1 個のファイルをコピーしました。

C:\Users\aaaa>cd OneDrive
C:\Users\aaaa\OneDrive>php -r "var_dump(file('./abc1.txt'));"
PHP Warning: file(./abc1.txt): failed to open stream: No such file or directory in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. file() Command line code:1

エラーが出た

困った...

 

解決策は…

(1) OneDriveをあきらめる

(2) 対象ファイルをOneDrive外にコピーして、PHP処理をしてからもとに戻す

実は同じファイルで、PhpStorm上でCode Snifferでのインスペクションは正常に動いていました。

なんで!?

Code Snifferのphpcs.batに変更を加えて、呼び出している引数を調べてみました。

@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/../squizlabs/php_codesniffer/bin/phpcs
echo %0 %* >> d:\temp\phpcs.log <=追加
php "%BIN_TARGET%" %*

すると…

d:\temp>type phpcs.log
phpcs.bat C:/Users/aaaa/AppData/Local/Temp/phpcs_temp.tmp/xxxx.php --standard=WordPress --encoding=utf-8 --report=xml --extensions=php,js,css,inc

本来のファイルは、C:/Users/aaaa/OneDrive/project/xxxx.phpです。

PhpStormは、phpcs.batを実行する前に、テンポラリにコピーして、そこで検証していたようです。
ちなみにphpcbf.batは、コピーせずにそのまま呼び出しているので、エラーになります。

回避策として、ファイルをコピーしてphpcbf.batを実行するバッチファイルを作成しました。
こちらを参考にしてください。

更新日:2019/08/26

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。