Archief - [PHP] background upload

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Robijntje007

Legacy Member
Hey,

Ik ben met een form bezig dat het uploaden van bestanden mogelijk maakt via een locale dropfolder en ftp.
Dus ik wil files verplaatsen over ftp (wat al werkt)
Wegens performantieredenen heb ik er voor gekozen op dit proces op de achtergrond te laten runnen dus gebruik ik nfcftpput (linux)
In CLI werkt het volgende commando perfect:
Code:
ncftpput -b -u naam -p wachtwoord -P 1980 127.0.0.1 /upload/ /home/Downloads/upload.zip

(Wetende dat de -b parameter er voor zorgt dat het een background proces is)
Maar als ik het uitvoer via PHP werkt het niet (zonder de -b parameter wel)

Zou iemand enig idee hebben hoe dit komt OF een goed alternatief voor dit euvel?

Robijntje007

Legacy Member
Voor de community hier wat wijzer te maken zal ik mijn oplossing zelf maar posten:
Ik gebruik de volgende functie

Code:
function executeBackgroundProces($command) {

    $command = $command . ' > /dev/null 2>&1 & echo $!';
    exec ( $command, $op );
    $pid = ( int ) $op [0];
    if ($pid != "")
        return $pid;

    return false;
}

Het commando dat ik run is: "ls bashfile"
De bashfile bevat commando's (gescheiden door ;) om te uploaden en het oorspronkelijke bestand te verwijderen nadat de upload compleet is.
Alvast "bedankt" :p

dJeez

Legacy Member
Euh? En hoe start de background upload dan? ls voert die bashfile toch niet uit? Als 't nu vb. /bin/bash is dat je uitvoert met dat script als parameter dan kan ik er nog inkomen dat het werkt.

Robijntje007

Legacy Member
de applicatie is ondertussen al in productie genomen en al uitgebreid getest geweest.
De functie executeBackgroundProces zal het commando dat je als argument mee geeft uitvoeren in de shell in de achtergrond.
De invoer van deze functie is in mijn geval het volgende:


Code:
$this->executeBackgroundProces ( "sh " . $this->createBashFile ( $newFile, $receiverEmailaddress, $fileId ) );

De bashfile die gecreëerd wordt bevat de gegevens om de upload te istantiëren.Vervolgens wordt de batchfile gewist:

Code:
$cmd = "ncftpput -u $this->ftpLoginName -p $this->ftpLoginPassword -P $this->ftpServerPort $this->ftpServerIp $this->ftpUploadDir $filePath";
		
$cmd .= " ; php $config->installLocation" . "application/classes/sendMail.php $receiverEmailaddress $fileId";
		
$cmd .= " ; rm $filePath -f";
		
$cmd .= " ; rm $bashfile -f";

dJeez

Legacy Member
Dus start je inderdaad een nieuwe shell op voor het background proces, en gebruik je niet ls zoals je aangaf - dat verklaart al veel :p.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan