ID:               12198
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Bogus
 Bug Type:         Reproducible crash
 Operating System: WINDOWS NT
 PHP Version:      4.0.6
 New Comment:

The version of PHP that this bug was reported in is too old. Please
try to reproduce this bug in the latest version of PHP (available
from http://www.php.net/downloads.php

If you are still able to reproduce the bug with one of the latest
versions of PHP, please change the PHP version on this bug report
to the version you tested and change the status back to "Open".


Previous Comments:
------------------------------------------------------------------------

[2001-07-22 15:35:43] [EMAIL PROTECTED]

Are you sure that when you print out something, does the script run all
the way and terminate properly?  Printing may just give you a 'sign of
life', but it may time-out eventually still.

------------------------------------------------------------------------

[2001-07-17 05:16:27] [EMAIL PROTECTED]

I've written this class to scan through a remote directory using FTP
functions. A recursive function is used to do the job, but it only
works if I print something to screen, else it hangs and the the script
eventually times out.
Here's the code, notice the first line of function readDir():

class SiteScan {
    var $_sSite;
    var $_iPort;
    var $_sUsername;
    var $_sPassword;
    var $_bDebug;
    var $_aErrors;

    //ftp
    var $_iConnectionStream;
    var $_sSystemType;
    var $_aFileStructure;


    function
SiteScan($site='localhost',$u='Administrator',$p='',$port=21) {
        //init connection
        $this->_iPort = $port;
        $this->_sSite = $site;
        $this->_sUsername = $u;
        $this->_sPassword = $p;

        $this->_bDebug = true;
        $this->_aErrors = array();

        //try to obtein an ftp stream
        if ($stream = ftp_connect($this->_sSite,$this->_iPort)) {
            $this->_iConnectionStream = $stream;

            //FileSystem successfully determined, now try to log in
            if
(!ftp_login($this->_iConnectionStream,$this->_sUsername,$this->_sPassword))
{
                $this->_aErrors[] = '<b>ERROR 002:</b> Username '
.$this->_sUsername. ' and password ' .$this->_sPassword. ' rejected';
            } else {
                //connection successful! Now try to determine operating
system
                if (!$this->_sSystemType = ftp_systype($stream)) {
                    $this->_aErrors[] = '<b>ERROR 003:</b> File system
type could not be determined';
                }
            }

        } else {
            $this->_aErrors[] = '<b>ERROR 001:</b> Could not connect to
' . $this->_sSite . ':' . $this->_iPort;
        }

        if ($this->_bDebug) {
            $this->_onError();
        }
    }

    function _analyseDir($aDirLine) {
        $aDirInfo = array();
        if(ereg("([-dl])[rwxst-]{9}",substr($aDirLine,0,10))) {
          $this->_sSystemType = "UNIX";
        }

        if (substr($aDirLine,0,5) == "total") {
            $aDirInfo[0] = -1;
        } elseif ($this->_sSystemType == "Windows_NT") {

            if (ereg("[-0-9]+ *[0-9:]+[PA]?M? +<DIR>
{10}(.*)",$aDirLine,$aRegExp)) {
                $aDirInfo[0] = 1;
                $aDirInfo[1] = 0;
                $aDirInfo[2] = $aRegExp[1];
            } elseif(ereg("[-0-9]+ *[0-9:]+[PA]?M? +([0-9]+)
(.*)",$aDirLine,$aRegExp)) {
                $aDirInfo[0] = 0;
                $aDirInfo[1] = $aRegExp[1];
                $aDirInfo[2] = $aRegExp[2];
            }
        } elseif ($this->_sSystemType == "UNIX") {
            if (ereg("([-d])[rwxst-]{9}.* ([0-9]*) [a-zA-Z]+ [0-9:
]*[0-9] (.+)",$aDirLine,$aRegExp)) {
                if ($aRegExp[1]=="d") $aDirInfo[0] = 1;
                    $aDirInfo[1] = $aRegExp[2];
                    $aDirInfo[2] = $aRegExp[3];
                }
            }

            if (($aDirInfo[2] == ".") || ($aDirInfo[2] == "..")) {
                $aDirInfo[0] = 0;
            }

            return $aDirInfo;
    }

    function readDir($sDir) {
        //if this echo statement is removed, then the whole script
hangs!!!
        echo ' ';

        //get an array of files from the base directory
        $aDirList = ftp_rawlist($this->_iConnectionStream,"");

        for ($iCount=0;$iCount<count($aDirList);$iCount++) {
             $aDirInfo = $this->_analyseDir($aDirList[$iCount]);

             //if current file is a directory
             if ($aDirInfo[0] == 1) {
                 $sNewDir = "$sDir/$aDirInfo[2]";

                 if (($aDirInfo[2] == "~") || (substr($aDirInfo[2],0,1)
== " ")) {
                     
$chdir=ftp_chdir($this->_iConnectionStream,$sNewDir);
                 } else {
                     
$chdir=ftp_chdir($this->_iConnectionStream,$aDirInfo[2]);
                 }

                 $stop = 0;

                 if (!$stop && $chdir) {
                      $this->readDir($sNewDir);
                 }

                 if (!ftp_chdir($this->_iConnectionStream,$sDir)) {
                     ftp_cdup($this->_iConnectionStream);
                 }

             } elseif ($aDirInfo[0]==0) {
                 $this->_aFileStructure[$sDir][] = $aDirInfo[2];
                 $size += $aDirInfo[1];
             }
        }
    }

    function _onError() {
        //
        if (count($this->_aErrors) > 0) {
            echo '<div id="debug" style="position:absolute; left:25px;
top:30px; width:575px; height:15px; z-index:1; background-color:
#FFFFCC; layer-background-color: #FFFFCC; border: 1px none
#000000">'."\n".'<pre>';
            while (list($iKey,$sError) = each($this->_aErrors)) {
                echo $sError."\n";
            }
            echo '</pre></div>';
        }
    }

    function ftpClose() {
        //
        ftp_quit($this->_iConnectionStream);
    }


}

//
echo '<pre>connecting to ftp site<br>';
$ftp = new SiteScan('yoursite','username','password','port');
$ftp->readDir('');
$ftp->ftpClose();
print_r($ftp->_aFileStructure);



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=12198&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to