0

ファイルをロックする最も簡単な方法を探しています。次のコードは、php コードを介して mysql から .csv ファイルをエクスポートします。

<?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 ファイルを zip ファイルに変換し、解凍する前にパスワードを作成します。

このファイルをロックするための安全性の高い方法を探しているわけではありません。ただし、グーグルで調べていると、次のコードが見つかりました。

<?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ファイルは空でエクスポートされますが、フィールド内に何かを書き込んで保存しようとすると; " filename " is read-only というエラーが表示され、別の名前でファイルとして保存する必要があります。ただし、ファイルとして保存した後でも、フィールドを編集して保存できます。名前を付けて保存を無効にするには?

4

2 に答える 2

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);

?> 
于 2012-09-27T09:01:08.840 に答える
0

chmod() 関数を使用して権限を変更できます。

次のようなパラメーターを渡すことができます

0777は、誰もファイルを読み書きできないように割り当てることができるのと同じ方法で、読み書きの完全な許可を意味します。

于 2012-09-27T09:12:35.590 に答える