0
我使用file_put_contents($文件,ob_get_contents())函數在PHP創建一個動態表單生成的文件的快照,並存儲在服務器上的文件的內容。它工作得很好,但如果有已經有相同名稱的文件,我想提示用戶詢問是否要覆蓋。使用AJAX,我可以通過隱藏的輸入字段傳遞文件的名稱,但無法傳遞文件的內容。如果還有其他更簡單的選擇,我不需要AJAX。提示用戶覆蓋
這裏: $ file是表單生成的文件的名稱。
if(file_exists($file))
{
echo '<div style="background:#000; padding:10px"><center style="color:#fff">File aready exists! ';
echo '<button type="button" onclick="loadXMLDoc()">Overwrite it!</button><div id="myDiv"></div></div><input type="hidden" id="hiddenfile" value="'.$file.'"></center>';
}
else{
file_put_contents($file, ob_get_contents());
echo '<div style="background:#000; padding:10px"><center><a href="'."/newslettercms/webversion/".$file.'" download style="color:#fff;">Click here to download the newsletter</a> • <a href="'."/newslettercms/webversion/".$file.'" target="_blank" style="color:#ddd">View web version</a></center></div>';
}
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
var hiddenfile=document.getElementById("hiddenfile").value;
xmlhttp.open("GET","inc/overwrite.php?hiddenfile="+hiddenfile,true);
xmlhttp.send();
}
</script>
Overwrite.php
<?php
$file=$_GET['hiddenfile'];
file_put_contents($file, ob_get_contents());
echo '<div style="background:#000; padding:10px"><center><a href="'."/newslettercms/webversion/".$file.'" download style="color:#fff;">Click here to download the newsletter</a> • <a href="'."/newslettercms/webversion/".$file.'" target="_blank" style="color:#ddd">View web version</a></center></div>';
echo "File overwritten success!";
?>
我看到的是最簡單的方法,如果該文件存在,只需將文件保存爲'$文件。 'temp',然後提示用戶是否要用臨時文件覆蓋原件。 – wavemode 2014-09-23 04:44:29
爲什麼此解決方案無法正常工作? – kasimir 2014-09-23 08:08:17
@kasimir怎麼把AJAX get請求無法將內容傳遞給overwrite.php文件。 – floCoder 2014-09-24 02:15:22