2011-12-08 26 views
5

長いファイルパスをインクルードしようとすると、PHPのインクルードが失敗します。短いインクルードパスがうまく動作します。PHPインクルード:ロングパスの問題

たとえば、次のように失敗します:

../../contents/2010-St-Louis-Rams-Tickets-Season-Package-Includes-Tickets-For-All-Regular-Season-Home-Games/inc/title.inc 

誰もが問題が可能性が任意のアイデアを持っていますか?

+1

パスが間違っていますか? – alex

+0

OSの設定とPHPの正確なエラーメッセージを投稿してください。本当のファイルが見つかりませんでしたエラーか、おそらく許可の問題かもしれません。お使いのOSがファイル名の長さを制限しているとは限りません。 –

+0

コードは正しいですが、同じコードがLinuxサーバーでappachiで動作していますが、linuxサーバーからWindows 2008サーバーへIIS 7で移行しました。エラーや警告は表示されません。 – Imran2220

答えて

1

パス(ドライブ名などを含む)が260文字を超えていないか確認してください。これは、Windowsの最大ディレクトリ長です。 Click here to see the reference

参照には、パス名の前に "\?\"を付けて余分な長いパス名を作成する可能性があることも記載されています。最大パス長は32767文字に拡張されます。しかし、これがPHPで使えるかどうかはわかりません。

+2

私はこの答えに+1があるので、誰でも\\?\構文をPHPで使うことで成功したのかしら?個人的に私はそれを働かせることができませんでしたが、多分私は何かを欠いている? –

+0

うん、 '\\?\'を前に付けても動かない。 [This](http://www.serverphorums.com/read.php?7,627200)は長い説明ですが、説明のように見えます。 – XedinUnknown

+0

あなたは正しいです。 PHPのバグのため、長いパス名は機能しません。これは[PHP 7.1で修正されました](https://github.com/php/php-src/blob/php-7.1.0RC4/NEWS#L763)です。 – Carsten

0

このような何かを見てテストを書くとき、私はsymfonyの1.xのプロジェクトと同じ問題を持っていた:

require_once __DIR__ . '/../../../../bootstrap/unit.php'; 
require_once __DIR__ . '/../../../../../../../MY/LONG/PATH.php' 

を、ここのものは、それらが/../../ ...多くを取るということです文字スペースの私の場合は、それらが使用されていない場合は動作します。あなたはあなたのルートを取得することができsymfonyにおいて

は(「SF_ROOT_DIR」)を取得::にsfConfigを呼び出すことにより、プロジェクトので、私は次のように自分のコードを変更することができます:

require_once __DIR__ . '/../../../../bootstrap/unit.php'; 
require_once sfConfig::get('sf_root_dir') . '/MY/LONG/PATH.php' 

これは動作します(私の中ケース)完璧。

ここではsymfonyフレームワークが提供するルートディレクトリを使用していますが、自分のプロジェクトではプロジェクトのルートディレクトリをどこかに定義してアクセス可能に保つだけです。