当前位置: 首页 > 知识库问答 >
问题:

Codeigniter do_上载在生产服务器中没有响应

淳于恺
2023-03-14

我做了一个页面,将上传某些文件类型。它在我当地的开发中运行良好,但在生产中不起作用。它不会通过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());
    }
}

我尝试将上载路径更改为不存在的文件夹,它显示“上载路径似乎无效”。表示do_upload()是否正常工作?

上载文件夹权限为777。

我也尝试过使用绝对路径,但仍然没有显示任何pass do_upload()。

或者和服务器有关?

有人知道发生了什么吗?帮助非常感谢。

谢谢

[第1版]

服务器的错误日志和正常日志中没有任何内容。我还设置了$config['log_threshold']=4;没有错误日志。

[编辑二]

生产服务器是linux下的第三方网络托管。我尝试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  

[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

在配置中。php:

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

在索引中。php:

$application_folder = 'v1';

当我执行APPPATH'时上传' 以上代码显示:

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

我尝试$path=$_SERVER['DOCUMENT_ROOT'] . '/gtapp/上传';它只显示:

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';

            }
        }
}

共有3个答案

丌官博文
2023-03-14

换行

upload_path上传

$upload_path=FCPATH.'上传/';

它也可以在生产服务器上使用。

牛经赋
2023-03-14

我曾经有过这个问题,我所做的就是改变以下内容:

更改:

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

致:

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

或者只是:

$configUpdload['upload_path'] = './uploads';
唐煜
2023-03-14

我在使用CI时遇到了类似的问题,并尝试验证应用程序文件夹外是否存在文件,发现CI为自己保留了此Environmental veriable。APPPATH,它从索引中查找CI所在的核心文件夹。php级别,其中包含应用程序和系统文件夹。因此,如果您尝试替换$configUpdload['upload\u path']='/上传' 带有$configUpdload['upload\u path']=APPPATH'上传'

你可能会碰上更多的运气。

 类似资料:
  • 我得到错误:com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法通过使用安全套接字层(SSL)加密建立到SQL服务器的安全连接。错误:“SQL服务器没有返回响应。连接已关闭。” Hibernate配置: application.properties: pom.xml: SQLServerException: openssl客户端连接服务器:1

  • 我使用两个解析服务器,一个用于主数据库,一个用于liveQuery。我还通过AWS ElastiCache设置了redis。问题是当我在客户端(iOS)中使用实时查询时,没有显示任何事件。代码对任何更改都没有响应。这里会有什么问题? 一个问题:来自AWS Elasticache的redisURL是这样的:(这会导致服务器启动错误)appname.jajj2i.0001.use1.cache.ama

  • 问题内容: 是否有任何Java库允许构建没有任何应用程序服务器框架的简单独立Web服务服务器? 问题答案: Java 6包含JAX-WS,这使得在独立应用程序中托管Web服务非常容易:

  • 我的插座有问题。io作为一名广播员与laravel echo合作。 我试过什么: 我可以看到用户在日志中连接: 我的队列正在运行,正在正确记录所有事件。 我可以在redis控制台中完美地看到redis我的事件和数据库通知。 但是没有广播任何事件,我也没有在laravel echo服务器控制台中看到它们。一切都在我的本地主机上运行,但在生产环境中没有,我失去了理智。 以下是我的laravel ech

  • 我正在尝试通过Multer将文件上载到服务器。这段代码所做的只是创建文件夹,而不是文件。我还尝试使用github上的教程,但在前端我的代码也没有成功 代码AJAX 还有MAIN.JS 我从前端获得的console.log输出:

  • 我在一些应用程序中尝试公开一些RESTful Web服务。不幸的是,我被卡住了。项目构建和部署很好,但我无法使用GET请求访问我的服务。 我的战争看起来很像:战争。 我得到了空的: 应用类别: 和服务类:import javax。ejb。无国籍;导入javax。ws。rs.GET;导入javax。ws。rs.路径;导入javax。ws。rs.PathParam;导入javax。ws。rs.产品;导