上载目标文件夹似乎不可写。 (笨)

时间:2011-04-24 18:58:28

标签: php file codeigniter upload directory

我有两个上传脚本,它们只使用不同的目录执行非常相似的功能。

function town_upload() {


        //Do not create a thumbnail
        $create_thumb = false;

        //Create the path for the upload
        $path = './public/uploads/towns/' . $this->uri->segment(3);

        $config['upload_path'] = $path;
        $config['allowed_types'] = 'jpg';
        $config['max_size'] = '2048';
        $config['max_width'] = '1024';
        $config['max_height'] = '768';
        $config['remove_spaces'] = TRUE;
        $config['overwrite'] = $this->image_upload_overwrite;

        if ($this->input->post('image_type') == 'main_image') {
            $config['file_name'] = 'main.jpg';
            $create_thumb = true;
        } 

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload()) {

            $this->session->set_flashdata('upload_error', array('error' => $this->upload->display_errors()));

        } else {

            //sucess so now we create the thumbnail
            $this->session->set_flashdata('upload_success', $this->upload->data());

示例:如果我的ID为6的城镇,则上传目录为public / uploads / towns / 6。在创建城镇时创建目录时,这非常正常。除了路径是public / uploads / hotels / [ID]之外,我对酒店的功能几乎完全相同。我已将权限设置为777,只是为了从现在的等式中删除它。

我无法理解这一点,因为它们都是非常相似的功能。这是酒店上传代码:

 function hotel_upload() {

        //Create the path for the upload
        $path = './public/uploads/hotels/' . $this->uri->segment(3);

        chmod($path, 0777);

        $config['upload_path'] = $path;
        $config['allowed_types'] = 'jpg';
        $config['max_size'] = '2048'; //kilobytes (2048 = 2mb)
        $config['max_width'] = '1024';
        $config['max_height'] = '768';
        $config['remove_spaces'] = TRUE;
        $config['overwrite'] = TRUE;

        if ($this->input->post('image_type') == 'main_image') {
            $config['file_name'] = 'main.jpg';
        }

        $this->load->library('upload', $config);

        if (!$this->upload->do_upload()) {

            $this->session->set_flashdata('upload_error', array('error' => $this->upload->display_errors() . ' <br/>Path: ' . $path . '<br/>Image Type: ' . $this->input->post('image_type')));

        } else {

            //sucess so now we create the thumbnail
            $this->session->set_flashdata('upload_success', $this->upload->data());

酒店功能给出错误“上传目的地文件夹似乎不可写。”。

以下是HTML表单的页面:

TOWN:

<?php echo form_open_multipart('admin/town_upload/' . $this->uri->segment(3));?>

            <input type="file" name="userfile" size="20" />

            <br /><br />

            <p>
                <input type="radio" name="image_type" checked="checked" class="radio" value="main_image" /> <label>Main Image</label>
                <input type="radio" name="image_type" class="radio" value="other_image" /> <label>Other Image</label>
            </p>

            <input type="submit" class="submit short" value="upload" />

        <?php echo form_close(); ?> 

HOTEL:

<?php echo form_open_multipart('admin/hotel_upload/' . $this->uri->segment(3));?>

            <input type="file" name="userfile" size="20" />

            <br /><br />

            <p>
                <input type="radio" name="image_type" checked="checked" class="radio" value="main_image" /> <label>Main Image (shown when visitors search the website)</label>
                <input type="radio" name="image_type" class="radio" value="other_image" /> <label>Standard Image</label>
            </p>

            <input type="submit" class="submit short" value="upload" />

        <?php echo form_close(); ?> 

提前致谢!几个小时以来一直在努力...... :(

3 个答案:

答案 0 :(得分:2)

您的代码没有检查chmod的工作原理。例如,默认情况下,apache喜欢以自己的用户或任何人身份运行,而不是以用户身份运行。因此,文件中的chmod可能会发现当前正在运行的用户并不拥有该文件,因此chmod会失败。

我要检查的第一件事是PHP认为它运行的用户,以及文件的所有者。

有is_writable函数,你可以检查目录是否可写。

答案 1 :(得分:2)

我遇到了同样的问题,发现了这种行为的可能原因。就我而言,我曾经创建过上传目录。我升级了php,它放入了一个新的php.ini文件,其中包含safe_mod = On.现在,当我在删除它后重新创建目录时,新的php参数引发了抛出此错误消息。

您是否有可能在PHP升级之前创建了城镇目录树,之后又创建了酒店目录树?

答案 2 :(得分:0)

好的,回过头来看看。我认为权限搞砸了,我摧毁并重新创建了文件夹,它似乎有效。