0

私はこの奇妙なことを起こしています。ローカルで開発している Zend Framework (PHP) Web アプリケーションは自分のコンピューターでは正常に動作しますが、サーバーにアップロードすると、アップロード ディレクトリが存在しないと見なされます。

私のアプリケーションには、アプリケーション外のディレクトリへのシンボリックリンクであるアップロード ディレクトリがあります。

#local
/myapp.local
    /application
    /data
        /uploads (symlink, points to ./../../shared_uploads)
    /public/index.php
/shared_uploads

#remote
/shared_uploads
/current (symlink, points to ./releases/myapp-2009-12-18)
/releases
    /myapp-2009-12-18
        /application
        /data
            /uploads
        /public/index.php

サーバーは、アプリケーションを提供するために を指し/current/public/index.phpます。実際にはreleasesディレクトリにあるので、1レベル深いのでしょうか? それとも、サーバーではなくローカル コンピューターにアップロード シンボリック リンクを作成したため、アクセス許可エラーでしょうか?

更新:私の/public/index.phpファイルでは、アップロード ディレクトリを次のように定義しています。

// Define path to uploads directory
defined('APPLICATION_UPLOADS_DIR')
    || define('APPLICATION_UPLOADS_DIR', realpath(dirname(__FILE__) . '/../data/uploads'));
4

3 に答える 3

1

UMASKあなたがそうしている限り、許可は問題にならないはずです0022が、問題はどのようにアップロードしていますか? FTPはシンボリックリンクを尊重しませんが(sftpはそうすると思いますが)、scpまたはrsyncはそうします。

それは間違いなくあなたのディレクトリ構造の入れ子です。シンボリックリンクは、その親の実際の場所から相対的でなければならないので、あなたの場合はln -s ../../../../shared_uploads. releasesここでの最も簡単な解決策は、実際のを参照するためにシンボリックリンクを作成することだと思いますshared_uploads

于 2009-12-19T03:51:10.513 に答える
0

これは役に立ちますか?

defined('APPLICATION_UPLOADS_DIR') || define('APPLICATION_UPLOADS_DIR', dirname(dirname(realpath(__FILE__))) . '/data/uploads');

2 つの s を..使用して を削除し、以前に実行してパスからシンボリック リンクを削除しました。dirname()realpath()

まったく必要ないと思いますがrealpath()

チャオ!

于 2009-12-19T04:37:27.287 に答える