2012-03-29 14 views
0

簡単な質問がありましたが、Googleで回答が見つかりませんでした。私は、さまざまなサーバー上で実行する必要があるアプリケーションを構築しています。ルート、サブディレクトリ、またはその他の方法でインストールされるかどうかはわかりません。また、IIS、Apache、またはその他のタイプのサーバーにインストールするかどうかはわかりません。私は本当に厄介な問題があります。いつも良いアップロードディレクトリを構築する方法。そのアップロードディレクトリはアプリケーションフォルダにあるので、私はいくつかのポイントを開始する必要がありますが、私は正しいアップロードディレクトリを書く方法を理解することはできません。そのようなファイルやディレクトリ、および「アップロード/ IMG」に$ temp_nameを移動することができません別:move_uploaded_fileアップロードディレクトリを構築する方法

//tried this for first time 
$upload_dir = getcwd().'upload/img'; 
//then tried this 
$upload_dir = 'upload/img'; 
//and tried couple of others, but more lame, so I will not post it... 

事は警告がストリームをオープンに失敗したと言い、その提起されていることです。

本当にどこが間違っているかわかりません。私はこれが不十分な質問であると確信していますが、それをうまくやる方法はわかりません。

+0

解決策は、getcwd()と内部パスの間に '/'がないことを追加することです。これがトリックでした。なぜ私がIDを逃したのか分からない。 –

答えて

1

マジックマクロ__FILE__を使用して、現在のファイルへのパス、つまりスクリプトの絶対パスを取得します。現在のフォルダを取得するには、dirname(__FILE__)を使用します。

パスロジックの残りの部分をその上に置くことができるはずです。

+0

私はそれを試しましたが、コードはディレクトリツリーのクラスdepperにあります。そのため、そのファイルの場所がわかります。 getcwd()を使った私の試み 'upload/img'はより良いものでした... –

0

まずアプリケーションデザイナーとして、アップロードディレクトリの適切な場所を選択する必要があります(またはインストール時にユーザーが選択する必要があります)。この場所は通常、Webディレクトリのルートの外側にあるように選択されているので、誰もURLを入力してアップロードされたファイルに直接アクセスすることはできませんが、他の方法で配置することもできます。

次に、Webサーバーがdirectory existsis writableを確認してください。ディレクトリを手動でインストールするか、アプリケーションの一部として「インストーラ」スクリプトを含めるようにユーザに要求することによって、ディレクトリを適切に作成して設定することができます。

最後に、ファイルが実際にアップロードされると、アップロードディレクトリへのパスを構築する必要があります。これを行うには多くの方法があります(管理者が自分の場所などを選択できる場合は、選択した場所にもよりますが)。通常は、設定ファイルに書き込まれた変数の値を読み込み、例えば

// config.php 
$DIR_UPLOAD = '/var/www/upload/'; 

この値は、インストール時にインストーラスクリプトまたは管理者が手動で設定します。

+0

URLからファイルを隠すための良い引数はありますか?とにかく私はそれらを行うにはURLが必要ですから? –

+0

@neosatan:通常、このURLは '$ _GET'パラメータを受け取り、[' readfile'](http://www.php.net/manual/)でターゲットファイルの内容を渡すPHPスクリプトになります。 ja/function.readfile.php)。これを行うと、スクリプトはファイルへのアクセスを許可する前にアクセス制御を実行できます。一方、ファイルに直接アクセスできる場合は、URLを持つ誰もがアクセスでき、あなたはそれを制御できません。 – Jon

+0

それは良いアイデアです。通常、私はいくつかのアクセス制御を実装しましたが、設計からアクセス可能なイメージなど、直接URLを持つ必要のないファイルに対してのみ実装しました。アップロードされたすべてのファイルにそのことをやってもらうというアイデアはまだ私にとっては新鮮ですが、それがどのように機能するのだろうか?それは、アクセス可能でなければならないファイルに対してCPUサイクルを浪費していませんか?または私は間違っていますか? –

関連する問題