Toon posts:

[PHP] system() werkt wel en niet.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit hier al enkele dagen te knoeien met iets heel dom. In eerste instantie leek het vanzelf te werken maar uiteindelijk blijkt het niet te gaan en ik heb absoluut geen idee waarom niet.

Reeds en jaar of 3 onderhoud en beheer ik een online shop. De catalogus van die winkel en de orders zitten netjes in een MySQL database. Die werkte en werkt nog altijd volledig naar wens.

Alleen is onze website sinds kort verhuist naar een nieuwe server bij onze hosting. Leuk, gratis verhuis naar een nieuwe en snellere server. Website overgezet en werkte perfect verder zonder 1 echte aanpassing te moeten doen.

Alleen duikt er nu 1 probleempje op. Op de nieuwe server staat de memory_limit op 8M. DIt was veel hoger op de oude server. Men heeft dit gedaan om foutieve scripts minder kans te geven de boel dicht te gooien, wat ik volledig begrijp. Maaaaaaaaaaaaaaar, en nu komt het :) Ook phpMyAdmin is beperkt door die 8meg en zondoende kan ik geen gezipte dump van mijn database meer binnenhalen wat die is raw bijna 16meg groot en dan lukt dat dus niet :)

Dus heb ik zelf een dump script in elkaar gestoken, gebaseerd op een script dat ik ergens online vond en dat doet perfect wat het moet doen. Alleen creeert het nu een 16meg file op de server. Geen probleem, ik heb er gzip bijgezet en dacht op het einde die file te gezippen met system('gzip $file', $retval). Voor de zekerheid staan de rechten van die file op 777, en toch doet gzip gewoon niets.

Path is juist, en ik krijg netjes output als ik system('gzip -h', $retval) uitvoer. Probeer ik de file te zippen, dan krijg ik geen foutcode en een lege return string zonder dat file gezipped is.

Ik moet wel zeggen dat ik de gzip executable van mijn eigen debain gepikt heb en op de webspace gezet heb om te gebruiken. Standaard is er geen gzip voorzien voor de users op die webserver. Maar als er iets moest foutlopen met die executable versie op die OS versie dan zou ik toch ook niet netjes de opties moeten krijgen bij een gzip -h ?

Het lijkt dus allemaal ok, maar toch werkt het niet :(

Zie ik hier iets heel simpel over het hoofd of probeer ik iets dat geen kans van slagen heeft ?

  • Wilke
  • Registratie: December 2000
  • Laatst online: 19:25
PHP Manual: system function
Note: When safe mode is enabled, you can only execute executables within the safe_mode_exec_dir. For practical reasons it is currently not allowed to have .. components in the path to the executable.
Heeft het daar toevallig niet iets mee te maken?

Verwijderd

De database van onze website was ook te groot om te importeren zodat we het in delen hebben gedaan. Je hebt raw 16MB, dan importeer je de data toch in 2 delen ?
Het is eventjes meer werk maar in mijn geval heeft het geholpen.

Verwijderd

System returnt slechts de stdout, stderr word verwaarloosd.
Om stderr te forwarden naar stdout:

system('gzip parameters 2>&1', $retval);

Overigens kan je met gzopen/gzwrite gewoon byte voor byte data wegschrijven (zie manual). Als je dat op een juiste manier doet hoef je niet in de problemen te komen met je memory limit.

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 03 december 2004 @ 17:34:
System returnt slechts de stdout, stderr word verwaarloosd.
Om stderr te forwarden naar stdout:

system('gzip parameters 2>&1', $retval);

Overigens kan je met gzopen/gzwrite gewoon byte voor byte data wegschrijven (zie manual). Als je dat op een juiste manier doet hoef je niet in de problemen te komen met je memory limit.
Dat had ik nog niet tegengekomen, ga ik direct eens doornemen. Bedankt.

Yup... gzopen/gzwrite did the trick. Dat ik daar overgekeken heb... :X

[ Voor 9% gewijzigd door Verwijderd op 03-12-2004 18:25 ]