2012-09-27 23 views
0

我正在尋找一種最簡單的方法來鎖定文件。下面的代碼出口從MySQL通過PHP代碼.csv文件:PHP - 鎖定導出的文件

<?php 
require_once('connect_db.php'); 
$fdate = $_POST['fdate']; 
$tdate = $_POST['tdate']; 
//Selecting Items based on Date 
$result = mysql_query("SELECT item_no, qty, discount_price, date FROM sold_items WHERE date BETWEEN '".$fdate."' AND '".$tdate."' ORDER BY date Desc"); 


//Check if File Name Exists 
$filename = $name = "C:/Sales-{$tdate}".".csv"; 
$index = 1; 
while(file_exists($filename)) { 
    $filename = $name.'--'.$index.".csv"; 
    $index++; 
} 

//Fputs the Table Headers 
fputcsv($f, array('Item No', 'Qty', 'Sell Price', 'Date')); 

//Fputcsv adds records to csv file 
while($row = mysql_fetch_array($result, MYSQL_NUM)) 
{ 
    fputcsv($f, $row); 
} 

//Close file 
fclose($f); 

?> 

所有我需要知道的是一個代碼,將做到以下任何操作:當試圖

  • 密碼保護.csv文件打開它

  • 鎖定領域,這使得該文件不可編輯

  • 或轉換此.csv文件到壓縮文件,以及e之前創建的密碼xtracting它。

我不是在尋找高安全的方式來鎖定此文件。然而,當谷歌搜索時,我發現這個代碼:

<?php echo system('zip -P pass file.zip file.txt'); ?> 

我試過了!但它不起作用。

謝謝


編輯:使用羊羣

$file = fopen("{$filename}", "w+"); 

// exclusive lock 
if (flock($file,LOCK_EX)){ 
//Fputs the Table Headers 
fputcsv($f, array('Item No', 'Qty', 'Sell Price', 'Date')); 

//Fputcsv adds records to csv file 
while($row = mysql_fetch_array($result, MYSQL_NUM)) 
{ 
    fputcsv($f, $row); 
} 

    flock($file,LOCK_UN); 
} 
else{ 
    echo "Could not lock file!"; 
} 

fclose($file); 

?> 

試圖寫任何領域裏面的東西並保存它時,它會導出CSV文件空,但;會彈出一個錯誤「文件名」是隻讀的,並強制我將文件另存爲另一個名稱。但是在保存爲文件後,您仍然可以編輯字段並保存。如何禁用保存爲?

回答

0

您可以使用chmod()函數更改其權限。

可以傳遞參數一樣

0777,這意味着用於讀寫,你可以通過分配沒有人可以讀取或寫入文件同樣的方式完全權限。

+0

我在PHP手冊中搜索了chmod(),發現像這樣chmod(「/ somedir/somefile」,0777)但我不' t請知道在哪裏放置這段代碼請幫助我:( – Alihamra

+0

fclose($ f);請讓我知道它適用於您或不是 –

+0

我已經將代碼放在fclose之後,並且在測試時它會打開文件,但當試圖更改字段中的值並進行文件保存時出現「filename」爲只讀的錯誤,這正是我想要的,但是...它自動要求將文件另存爲另一個文件名,製作文件領域可編輯。有沒有辦法不要求另一個另存爲選項? – Alihamra

1

那麼PHP函數flock呢?小例子:

<?php 

$file = fopen("test.txt","w+"); 

// exclusive lock 
if (flock($file,LOCK_EX)){ 

    //write to file here 

    // release lock 
    flock($file,LOCK_UN); 
} 
else{ 
    echo "Could not lock file!"; 
} 

fclose($file); 

?> 
+0

我從來沒有嘗試過,但可否請您寫下代碼。我只是在做上面的代碼時遇到困難。我不太熟悉php文件。 :( – Alihamra

+0

@Alihamra有一個問題:您的代碼現在是否真的有效? –

+0

flock絕對是它的方法.. – smassey