タイトルが示すように、実際のファイルシステム(html5サンドボックスではない)のローカルディレクトリを監視することは可能ですか?新しい写真を探してアップロードする自動写真アップローダーを作成したいと思います。
2 に答える
Javascriptを使用したローカルファイルアクセスの繰り返しの可能性。
私の理解では、Webブラウザからローカルファイルシステムに直接アクセスすることはできません。フォーム入力タグやドラッグアンドドロップなどの仲介機能を使用する必要があります。
オペレーティングシステムのjavascriptインタープリターまたはV8のようなものを使用する場合は、ファイルシステムへのアクセスを回避できる可能性があります。また、Chromeには実験的なjavascript apiがあり、それが選択したブラウザである場合は、Chromeフラグページで探すことができます。それはすべて、あなたが個人的なプロジェクトを行っているのか、それともウェブのために何かをしているのかによって異なります。
それ以外の場合は、PHP、Ruby、Pythonなどの別のスクリプト言語がニーズに適しています。
Javascriptタイミングイベントを設定できます。すなわち:setInterval()
メソッドを使用します。
一方、onClick event
次のコードを実行するために、またはその他のイベントをトリガーするボタンを作成できます。
ノート:
間隔を設定する場合は、リクエストを再送信する前に、リクエストが受信されたことを確認してください。
これを実現するには、次のように、XMLHTTPリクエストのreadyStateが4に等しいことを確認する必要があります。
xmlhttp.readyState == 4
ノート:
これは、リクエストを送信し、レスポンスを解析して、Javascript配列に配置するためのものです。
xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "check_dirs.php", true);
xmlhttp.send();
fileArray = new Array();
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
xmlDoc = xmlhttp.responseXML;
fileList = xmlDoc.getElementsByTagName("filesChanged");
while (fileArray.length > 0)
// clean the whole array.
// we want to store the newly generated file list
{
fileArray.pop();
}
for (i = 0; i < fileList.length; i++)
{
fileArray[fileArray.length] = fileList[i].childNodes[0].nodeValue;
}
}
}
PHP script
さらに、カスタムディレクトリで、指定された日付よりも新しいファイルがないかどうかを確認するために少し書く必要があります。このファイルは、リクエストで送信される可能性があり、次のようにXML応答を送り返します。
<?php
(...) // check dir. output $files contain the xml nodes for the files to send
// mockup below
// Get our XML. You can declare it here or even load a file.
$xml_builder = '<?xml version="1.0" encoding="utf-8"?>';
$xml_builder .= $files;
// We send XML via CURL using POST with a http header of text/xml.
$ch = curl_init('http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_builder);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.hello..co.uk');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ch_result = curl_exec($ch);
curl_close($ch);
/*
echo $ch_result;
*/
?>
ディレクトリをチェックしてXML応答を作成するためのモックアップ関数を次に示します。
<?php
function analizeDir($dir)
{
if (is_dir($dir))
{
$dir_resource = opendir($dir);
while (false !== ($res = readdir($dir_resource)))
{
if ($res != "." && $res != ".." && $res != "old")
{
if (is_dir($dir . "\\" . $res)) // this is a subforder
{
analizeDir($dir . "\\" . $res);
} else { // this is a file
checkFile($dir . "\\" . $res);
}
}
}
}
}
function checkFile($file)
{
$today = date("Y-m-d H:i:s");
// if the difference in days between today
// and the date of the file is more than 10 days,
// print it in the response
if (date_diff(datemtime($file), $today) > 10)
{
$files .= "<filesChanged>" . $file . "</filesChanged>";
}
}
?>