मैं PHP में Gnu Find ("ढूंढें") को दोहराने की कोशिश कर रहा हूं, लेकिन इसकी गति के करीब भी असंभव लगता है। PHP कार्यान्वयन कम से कम दो बार खोजने के समय का उपयोग करते हैं। PHP के साथ ऐसा करने के तेज तरीके हैं?PHP में रिकर्सिव फ़ाइल स्कैन को गति देना संभव है?
संपादित करें: मैं एक कोड उदाहरण एसपीएल कार्यान्वयन का उपयोग जोड़ा - अपने प्रदर्शन पुनरावृत्ति दृष्टिकोण
EDIT2 के बराबर है: जब PHP से खोज बुला यह वास्तव में देशी पीएचपी कार्यान्वयन की तुलना में धीमी थी। मुझे लगता है मैं क्या मिल गया है :) मैं के साथ संतुष्ट होना चाहिए
// measured to 317% of gnu find's speed when run directly from a shell
function list_recursive($dir) {
if ($dh = opendir($dir)) {
while (false !== ($entry = readdir($dh))) {
if ($entry == '.' || $entry == '..') continue;
$path = "$dir/$entry";
echo "$path\n";
if (is_dir($path)) list_recursive($path);
}
closedir($d);
}
}
// measured to 315% of gnu find's speed when run directly from a shell
function list_iterative($from) {
$dirs = array($from);
while (NULL !== ($dir = array_pop($dirs))) {
if ($dh = opendir($dir)) {
while (false !== ($entry = readdir($dh))) {
if ($entry == '.' || $entry == '..') continue;
$path = "$dir/$entry";
echo "$path\n";
if (is_dir($path)) $dirs[] = $path;
}
closedir($dh);
}
}
}
// measured to 315% of gnu find's speed when run directly from a shell
function list_recursivedirectoryiterator($path) {
$it = new RecursiveDirectoryIterator($path);
foreach ($it as $file) {
if ($file->isDot()) continue;
echo $file->getPathname();
}
}
// measured to 390% of gnu find's speed when run directly from a shell
function list_gnufind($dir) {
$dir = escapeshellcmd($dir);
$h = popen("/usr/bin/find $dir", "r");
while ('' != ($s = fread($h, 2048))) {
echo $s;
}
pclose($h);
}
संभवतः नहीं के लिए PHP मैनुअल टिप्पणियों से कोड पर निम्नलिखित कोड आधारित किया है। PHP उच्च स्तर है और शायद गति के संदर्भ में जीएनयू फाइंड (जिसे शायद सी में लिखा गया है) जैसे कुछ मेल नहीं खाएगा। इसके अलावा, यह रिकर्सन में कुख्यात रूप से धीमा है। उदाहरण के लिए –
+1 उदाहरण के लिए – buggedcom