2009-06-16 7 views
3

PHPからファイルパスをパラメータとして実行ファイルに渡したい場合、ファイルパスにスペースが含まれる可能性があります。実行ファイルはパラメータの前後で引用符を処理していないようですので、長い名前の代わりに短いDOS名を渡すことができます。PHPからファイルの短いDOS名を取得できますか?

PHPは、旧式のDOS 8.3ファイル名について何か知っていますか?

答えて

4

COM/.net extension built-inのphp/win32が必要です。これを使用してWSH FileSystemObjectを作成し、のShortPath propertyを照会することができます。

<?php 
$objFSO = new COM("Scripting.FileSystemObject"); 
$objFile = $objFSO->GetFile(FILE); 
echo "path: ", $objFile->Path, "\nshort path: ", $objFile->ShortPath;
プリント
path: C:\Dokumente und Einstellungen\Volker\Desktop\test.php 
short path: C:\DOKUME~1\Volker\Desktop\test.php

0

スペースをバックスラッシュするのはどうですか?

Home/My Documents/ --> Home/My\ Documents/ 
+0

私が実行しようとしている実行可能ファイルは、バックスラッシュを名前の一部として扱います。あなたの例では、ファイルを開こうとします。Home/My \ –

+0

おそらくphphilが示唆するようにescapeshellargが必要です。コマンドラインから直接呼び出す場合は、バックスラッシュでエスケープしてください –

1

escapeshellarg()を見て、パラメータを二重引用符で囲んでください。

+0

私はそれもうまくいくと思っていました。それは私がdirコマンドを実行すると動作しますが、私が実行しようとしているコマンドを実行すると動作しません。 –

+0

実行ファイルをエスケープするにはescapeshellcmd()を使用し、引数にはescapeshellarg()を使用します。 –

+0

提案してくれてありがとう、しかし私はescapeshellcmdを全く理解していない。 Windowsでは、特殊文字をスペースで置き換えるように見えます。 'C:\ Documents and Settings \ don \ foo'は 'C:Documents and Settings don foo'になります。それはどのように役立つのですか? –

1

WindowsのKernel32にはGetShortPathName APIが必要です。 PHPから呼び出すには、Win32 API extension ...

+0

これはおそらくもっと速いでしょう。残念ながら、PHP 5.3rc2のビルドにはw32モジュールがなくてテストできません。 - /あなたの投稿へのリンクを追加しても構いません。 – VolkerK

関連する問題