2012-08-23 121 views
2

我使用Valums File Uploader使用XHR上传文件。我使用的脚本在我的活动服务器上效果很好,但在本地服务器上失败。有关的代码如下:PHP stream_copy_to_stream在本地服务器上无法正常工作

$input = fopen("php://input", "r"); 
    $temp = tmpfile(); 
    $realSize = stream_copy_to_stream($input, $temp); 
    fclose($input); 

    if ($realSize != $this->getSize()){    
     return false; 
    } 

    $target = fopen($path, "w");   
    fseek($temp, 0, SEEK_SET); 
    stream_copy_to_stream($temp, $target); 
    fclose($target); 
    chmod($path, 0644); 

的事情是,$ realSize是我的本地服务器上,而空它确实有我的活的服务器上的值。所以在本地服务器上,它的大小检查就会中断。我怀疑这是一个服务器配置问题,但我不完全知道要寻找什么。有人能指引我进入正确的方向吗?

+1

你确定'$ input'和'$ temp'都是有效的资源吗? – Matt

+0

我对'stream_copy_to_stream'不是很熟悉,但是你的代码看起来不像[manual](http://php.net/manual/en/function.stream-copy-to-stream)中的例子。 PHP)。 '$ temp'不是'fopen()'的结果吗? (当然,除非'tmpfile()'是做什么的。) – Matt

+0

嗨马特,它是来自Valums文件上传器(http://valums.com/ajax-upload/)的一段代码。但是你对资源$ input和$ temp的有效性提出质疑。 $ temp似乎是空的,所以我会从这一点看看。 – tvgemert

回答

2

我发现了罪魁祸首。 tmpfile()无法创建临时文件,因为temp文件夹上的权限不允许写入。使用sys_get_temp_dir()找到临时文件夹的位置使此目录可写,并且全部重新开始!

相关问题