[PHP] In loop uitvoeren passthru() laat apache vastlopen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Voor een klant maak ik een systeem waardoor hun lokale data gesynchroniseerd wordt met de online data. Nu zijn er 10 tabellen waarvan ik voor het synchroniseren een backup wil maken. Dit doe ik met dit script:
code:
1
2
3
4
5
$command = $this->path_to_mysql."mysqldump -u ".$this->db_vars['user']." -p".$this->db_vars['pass']." ".$this->db_vars['db']." ".$table;
ob_start();
passthru($command);
$output = ob_get_contents();
ob_end_clean();


Als ik dit voor 1 tabel uitvoer, gaat het prima. Wil ik alle 10 tabellen in een loop "backuppen", dan loopt apache vast na de backup van de 2e of 3e tabel. Ik heb het ook met shell_exec geprobeerd, maar daar gebeurt precies hetzelfde. Apache is geïnstalleerd op Windows XP.

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Waarom gebruik je uberhaupt output-buffering hierzo? Daarnaast; wat zijn je PHP script-timeout instellingen, loop je niet gewoon tegen je maximale tijd aan? Ik weet ook niet wat je met $output gaat doen; maar je weet wel dat je mysqldump direct naar disk kan laten pipen? Verder; loop je niet gewoon tegen een geheugenlimiet aan door op deze manier de data in je geheugen te plaatsen?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Spider.007 schreef op donderdag 13 juli 2006 @ 12:19:
Waarom gebruik je uberhaupt output-buffering hierzo? Daarnaast; wat zijn je PHP script-timeout instellingen, loop je niet gewoon tegen je maximale tijd aan? Ik weet ook niet wat je met $output gaat doen; maar je weet wel dat je mysqldump direct naar disk kan laten pipen? Verder; loop je niet gewoon tegen een geheugenlimiet aan door op deze manier de data in je geheugen te plaatsen?
De output is een query die ik in een backup tabel opsla. Ik betwijfel of het te maken heeft met timeout, want het gebeurt al vrij vlot (binnen 10 seconden). Zou dat het kunnen zijn, dat de gegevens in de variabele $output de boel laten crashen omdat het teveel is?

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Kijk eens naar het geheugengebruik van Apache...loopt dat niet te hoog op?

Ik zou trouwens dit doet in plaats van die vieze output buffer:
PHP:
1
2
3
$command = $this->path_to_mysql."mysqldump -u ".$this->db_vars['user']." -p".$this->db_vars['pass']." ".$this->db_vars['db']." ".$table;
ob_start();
exec($command, $output, $return);

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
-NMe- schreef op donderdag 13 juli 2006 @ 13:00:
Kijk eens naar het geheugengebruik van Apache...loopt dat niet te hoog op?

Ik zou trouwens dit doet in plaats van die vieze output buffer:
PHP:
1
2
3
$command = $this->path_to_mysql."mysqldump -u ".$this->db_vars['user']." -p".$this->db_vars['pass']." ".$this->db_vars['db']." ".$table;
ob_start();
exec($command, $output, $return);
Ik heb even gekeken naar het geheugengebruik van apache. Er zijn twee processen apache.exe. De een heeft 18.296kb geheugen en de ander 21.596. Na het opstarten van het proces stijgt de laatste naar 22.908kb en daarna gebeurt er niets meer. Controle in de tabel backup levert 1 resultaat op. Er is dus maar 1 backup gemaakt.

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hoe ziet je loop er precies uit?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
-NMe- schreef op donderdag 13 juli 2006 @ 14:15:
Hoe ziet je loop er precies uit?
Dat kan ik niet heel makkelijk laten zien. De functie createBackup wordt in de loop elke keer aangeroepen. De complete functie ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function createBackup($table) {
        
    $command = $this->path_to_mysql."mysqldump -u ".$this->db_vars['user']." -p".$this->db_vars['pass']." ".$this->db_vars['db']." ".$table;

    ob_start();
    passthru($command);
    $output = ob_get_contents();
    ob_end_clean();
        
    $output = preg_replace("/\/\*.*\*\/;/", "", $output);
    $query = "INSERT INTO tbl_backup (`table`,datum,query) VALUES ('".$table."','".date("Y-m-d H:i:s")."','".addslashes($output)."')";
    $this->execTransferQuery($query,1);
        
}

Als ik alleen de passthru functie uitzet, doet ie het prima :|

Ronaldude.nl!!!, Specs


Acties:
  • 0 Henk 'm!

  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Zo te zien gebruik je output buffering om de output van passthru op te vangen. Je kan beter shell_exec gebruiken, omdat deze functie de complete output teruggeeft als een string.

Acties:
  • 0 Henk 'm!

  • Ronaldude
  • Registratie: Juli 2002
  • Laatst online: 06-03-2021

Ronaldude

Zipp it!!!

Topicstarter
Zr40 schreef op donderdag 13 juli 2006 @ 14:35:
Zo te zien gebruik je output buffering om de output van passthru op te vangen. Je kan beter shell_exec gebruiken, omdat deze functie de complete output teruggeeft als een string.
Ja ok, maar dat gebruikte ik ook. Dit was meer een poging tot het vinden van een oplossing voor het vastlopen. Ik denk dat het uitvoeren van meerdere command's hem doet struikelen. Dat zou heel jammer zijn, want mysql_dump geeft een prachtig stukje sql :)

Ronaldude.nl!!!, Specs

Pagina: 1