首页 文章

PHP mkdir无法在服务器中创建目录

提问于
浏览
0

我在服务器(centos)中创建文件夹时遇到问题,有一个带有文件上传字段的表单,其中ajax回调总是返回错误:

警告:mkdir():第90行/home/sitename/public_html/inc/callback/request_update.php中的权限被拒绝警告:move_uploaded_file(../../ images / listing / 16 / 805202.jpg):未能open stream:第95行/home/sitename/public_html/inc/callback/request_update.php中没有这样的文件或目录警告:move_uploaded_file():无法将'/ tmp / phpnrtrdp'移动到'../../ images /listing/16/805202.jpg'位于第95行的/home/sitename/public_html/inc/callback/request_update.php

并且它指示文件 request_update.php 中的行导致错误:

mkdir($ output_dir,0755,true);

request_update.php:

if(isset($_FILES['files'])){

foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){

    $file_name = $key.'_'.$_FILES['files']['name'][$key];
    $file_size = $_FILES['files']['size'][$key];
    $file_tmp = $_FILES['files']['tmp_name'][$key];
    $file_type = $_FILES['files']['type'][$key];

    //explode fine name and extension
    $ext_x = explode('.', $_FILES['files']['name'][$key]);
    $ext = strtolower(end($ext_x));
    $file_name = str_replace('.'.$ext, '', $_FILES['files']['name'][$key]);

    //new file name
    $output_dir = '../../images/listing/'.$list_id;
    $new_file_name[] = rand(1, 999999).'.'.$ext;
    $pathfile = $output_dir.'/'.end($new_file_name);

    // create directory if does not exist
    if(is_dir($output_dir) == false){
        mkdir($output_dir, 0755, true); /*this is where error indicate*/
    }

    if(is_dir($pathfile) == false){

        if(move_uploaded_file($file_tmp, $pathfile)){

            //watermark
            $water_path = '../../images/watermark.jpg';
            $watermark = WideImage::load($water_path);

            //resize original image
            WideImage::load($pathfile)->resize(300, 360)->merge($watermark, '50% – 25', '100% – 40', 80)->saveToFile($pathfile);


        }

    }

}

}

我已经尝试过在另一个共享服务器甚至localhost中运行相同的代码,该文件夹可以一直创建好,会发生什么?

1 回答

  • 1

    我想补充一下Simon Groenewolt的评论答案,你应该从检查PHP是否真的可以通过使用is_writable函数写入你想要的路径开始:

    例:

    $filename = 'test.txt';
    if (is_writable($filename))
      {
        echo 'The file is writable';
      } 
    else
      {
        echo 'The file is not writable';
      }
    

    只需通过运行 666 (即 666 ,即 userownerworld )运行 666 ,设置适当的权限,如Log1c所述,该目录是您尝试写入的目录 .


    is_writable()如果文件名存在且可写,则返回TRUE . filename参数可以是目录名,允许您检查目录是否可写 . 请记住,PHP可能正在以Web服务器运行的用户ID(通常是“nobody”)访问该文件 . 不考虑安全模式限制 .

    编辑1:

    确保PHP open_basedir 设置也设置为访问 /tmp . 您可以将其禁用以进行测试,以查看您获得的内容 . 通过运行以下命令,尝试检查 open_basedir 设置的设置:

    echo ini_get('open_basedir');
    

相关问题