4

特定の種類のファイルをアップロードするページを作成しました。私のローカル開発では問題なく動作しますが、本番環境では動作しません。do_upload() 関数を渡しません。それ以上は何も表示されません。

$path = 'uploads';
echo 'path: '. $path .' <br>'; 

//-- config for uplaod --
$configUpdload['upload_path']   = $path ;
$configUpdload['allowed_types'] = 'gif|jpg|png|xls|xlsx|pdf';
$configUpdload['max_size']   = '4000'; //size in kilobytes
$configUpdload['encrypt_name']  = TRUE;

//-- load upload library --
$this->load->library('upload');

$this->upload->initialize($configUpdload);

if ($_FILES['fileref']['name']!="")
{
    ini_set('display_errors', true);
    error_reporting(E_ALL);

    echo 'uploadAttachment<br>';

    $uploaded = $this->upload->do_upload("fileref");

    echo 'uploaded: '. $uploaded . '<br>';

    if ($uploaded == true)
    {
        echo 'uploaded data<br>';
        $inputUp = $this->upload->data();
        echo 'data: '. print_r($inputUp,true) . '<br>'; 
        $uploadInput['orig_name']   = $inputUp['orig_name'];
        $uploadInput['enc_name']    = $inputUp['file_name'];
        $uploadInput['extension']   = $inputUp['file_ext'];

        echo 'uploaded true<br>';
    }else{
        die($this->upload->display_errors());
    }
}

upload_path を存在しないフォルダーに変更しようとしましたが、「アップロード パスが有効ではないようです」と表示されます。do_upload() が正しく機能するということですか?

アップロード フォルダーのパーミッションは 777 です。

また、絶対パスを使用してみましたが、do_upload() を渡すと何も表示されません。

それともサーバーと関係ありますか?

誰が何が起こっているのか知っていますか?大変助かりました。

ありがとう。

[編集1]

サーバーのエラーログにも通常のログにも何もありません。$config['log_threshold'] = 4; も設定しました。エラーログはありません。

[編集2]

本番サーバーは、Linux でのサードパーティの Web ホスティングです。私は php_info() を試し、アップロードに関係することをすべてトレースしました。

file_uploads        On  On  
max_file_uploads    20  20  
pload_max_filesize  30M 30M  
upload_tmp_dir      /tmp/   /tmp/  
suhosin.upload.disallow_binary  0   0  
suhosin.upload.disallow_elf 1   1  
suhosin.upload.max_uploads  25  25  
suhosin.upload.remove_binary    0   0  
suhosin.upload.verification_script  no value  

   また、ファイルサイズを小さくしようとしました $configUpdload['max_size'] = '10'; しかし、do_upload() の後にまだメッセージはありません。

[Edit3] 私のフォルダ構造:

public_html/gtapp/
public_html/gtapp/csystem/ <- is system folder
public_html/gtapp/v1/ <- is application folder
public_html/gtapp/media/
public_html/gtapp/uploads/
public_html/gtapp/license.txt

config.php で:

$config['base_url'] = 'http://www.example.com/gtapp/

index.php で:

$application_folder = 'v1';

上記のコードを実行すると、次APPPATH . 'uploads';のようになります。

uploadAttachment
path: v1/uploads
uploaded: 
The upload path does not appear to be valid.

私はそれを試し$path = $_SERVER['DOCUMENT_ROOT'] . '/gtapp/uploads'; てみました:

uploadAttachment
path: /home/user/domains/example.com/public_html/gtapp/uploads 

[編集4]

ネイティブ PHP アップロード コードの粗いバージョンを作成しましたが、動作します。サーバーの問題ではないと思います。以下はコードです:

$name = 'fileref'; 

$upload_path    = './uploads/';
$allowed_types  = array("jpg", "jpeg", "gif", "png", "xls", "xlsx", "pdf");
$extension      = end(explode(".", $_FILES[$name]["name"]));
$max_size       = '4000';

if ($_FILES['fileref']['name']!="")
{
    if ((($_FILES[$name]["type"] == "image/gif")
        || ($_FILES[$name]["type"] == "image/jpeg")
        || ($_FILES[$name]["type"] == "image/pjpeg")
        || ($_FILES[$name]["type"] == "image/png")
        || ($_FILES[$name]["type"] == "image/x-png")
        || ($_FILES[$name]["type"] == "application/excel")
        || ($_FILES[$name]["type"] == "application/vnd.ms-excel")
        || ($_FILES[$name]["type"] == "application/msexcel")
        || ($_FILES[$name]["type"] == "application/pdf")
        || ($_FILES[$name]["type"] == "application/x-download"))
        && (round($_FILES[$name]["size"]/1024,2) < $max_size )
        && in_array($extension, $allowed_types))
        {

            if ($_FILES[$name]["error"] > 0)
            {
                echo $_FILES[$name]["error"]);
            }
            else
            {
                $uploadInput['orig_name']   = $_FILES[$name]["name"];
                $uploadInput['enc_name']    = sha1($_FILES[$name]["name"]);
                $uploadInput['extension']   = $_FILES[$name]["type"];

                $moved = move_uploaded_file($_FILES[$name]["tmp_name"], $upload_path . $uploadInput['enc_name'] . '.' . $extension);

                if($moved)
                    echo 'success';
                else
                    echo 'fail';

            }
        }
}
4

3 に答える 3

0

私は一度この問題を抱えていましたが、私がしたことは以下を変更することだけでした:

変化する:

$path = 'uploads';
$configUpdload['upload_path'] = $path ;

に:

$path = './uploads';
$configUpdload['upload_path'] = $path;

あるいは単に:

$configUpdload['upload_path'] = './uploads';
于 2013-01-24T12:19:40.373 に答える
0

CI で同様の問題が発生し、アプリ フォルダーの外部にファイルが存在することを確認しようとしたところ、CI にはこの 1 つの環境変数が自分用に予約されていることがわかりました。APPPATH を使用すると、アプリケーションとシステム フォルダーがある index.php レベルから、CI が含まれるコア フォルダーが検出されます。だからあなた$configUpdload['upload_path'] = './uploads' ;$configUpdload['upload_path'] = APPPATH.'uploads';

あなたはもう少し運に出くわすかもしれません。

于 2012-09-09T09:58:07.263 に答える
0

この行を変更

$upload_path = './uploads/';

$upload_path = FCPATH.'uploads/';

また、本番サーバーでも機能します。

于 2019-02-16T10:14:08.203 に答える