【问题标题】:Write binary file in PHP用PHP编写二进制文件
【发布时间】:2012-07-05 09:30:04
【问题描述】:

我写了一个PHP文件,它会在服务器中保存一个JPEG文件,部分代码如下:

    //create folder if folder not exist
if (!is_dir($save_path)){

    $old = umask(0);
    $flag = @mkdir($save_path,0777);
    umask($old); 

if(isset($flag)){
    $string = 'Folder Create Success!'."\n";
}else{
    $string= 'Folder Create Fail!'."\n";
}
echo $string;

}else{

   echo "Folder exist!!!!";

}


//write the content to the server
$base=$_REQUEST['image'];
$binary=base64_decode($base);
header('Content-Type: image/jpg; charset=utf-8');

if(!$file = fopen($path, 'wb')){

    echo 'Image upload Fail!'."\n";
    return;
}
else
{

    fwrite($file, $binary);
    fclose($file);

}

问题是当我运行代码时,如果文件夹不存在,它只会创建文件夹,但内容不能保存在文件夹中。错误信息是:

[2012 年 7 月 5 日星期四 16:59:06] [错误] [客户端 10.95.61.220] PHP 警告:fopen(/mnt/csis/upload/newphoto/others/12346_test/12346_test_2012-07-05_others_abc.jpg):无法打开流:第 57 行 /var/www/html/upload_image.php 中的权限被拒绝

但是,如果我再次运行代码,由于该文件夹是过去创建的,它可以正常工作。内容可以保存在文件夹中......

我有什么问题吗?我尝试在网上寻找答案,但仍然无法解决问题。

任何人都可以提供帮助,非常感谢!

【问题讨论】:

    标签: php file-io io binaryfiles


    【解决方案1】:

    我会尝试更改文件夹的创建以使用recursive flag

    $flag = @mkdir($save_path . "/" . $file,0777,true);
    

    【讨论】:

    • 你确定吗?我看到你有$path$basepath - 你能echo 给我看吗?
    • 如果还是不行,请在打开文件前尝试使用chdir($path);
    • 其实$path是要保存的文件的路径,$savepath是路径+文件名。另一方面,我在打开文件之前尝试过 chdir($path) 但问题仍然存在......
    • 但您正在尝试这样做:fopen($path, 'wb'),根据您的最后一句话,这意味着打开目录...
    • 最终我解决了这个问题,在创建新文件夹时等待 10 秒保存内容.....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2011-12-07
    • 2015-11-29
    • 2017-10-20
    • 2013-05-13
    相关资源
    最近更新 更多