2012-08-23 162 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()找到臨時文件夾的位置使此目錄可寫,並且全部重新開始!

相關問題