我有两个上传脚本,它们只使用不同的目录执行非常相似的功能。
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(); ?>
提前致谢!几个小时以来一直在努力...... :(
答案 0 :(得分:2)
您的代码没有检查chmod的工作原理。例如,默认情况下,apache喜欢以自己的用户或任何人身份运行,而不是以用户身份运行。因此,文件中的chmod可能会发现当前正在运行的用户并不拥有该文件,因此chmod会失败。
我要检查的第一件事是PHP认为它运行的用户,以及文件的所有者。
有is_writable函数,你可以检查目录是否可写。
答案 1 :(得分:2)
我遇到了同样的问题,发现了这种行为的可能原因。就我而言,我曾经创建过上传目录。我升级了php,它放入了一个新的php.ini文件,其中包含safe_mod = On.
现在,当我在删除它后重新创建目录时,新的php参数引发了抛出此错误消息。
您是否有可能在PHP升级之前创建了城镇目录树,之后又创建了酒店目录树?
答案 2 :(得分:0)
好的,回过头来看看。我认为权限搞砸了,我摧毁并重新创建了文件夹,它似乎有效。