特定の種類のファイルをアップロードするページを作成しました。私のローカル開発では問題なく動作しますが、本番環境では動作しません。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';
}
}
}