[PHP] "Mhash" gebruiken in plaats van "hash"

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • slash24
  • Registratie: November 2002
  • Laatst online: 20-08 11:34
Ik ben een Noob op het gebied van PHP, maar loop hier op mijn werk tegen een klein probleempje aan:
Een ex-collega heeft in het verleden een PHP script geschreven waarin de functie Mhash wordt gebruikt. Nu hebben we voor een test een Ubuntu machine opgetuigd en willen het script daarop gebruiken. Op de Ubuntu machine draait PHP versie 5.2.4, waarin standaard de functie "Hash" enabled staat in plaats van Mhash. Mhash kunnen we via de synaptic package manager zo installeren, maar dit geeft conflicten in combinatie met "Hash" (is het vermoeden)

Op de machine waar het script voorheen op gebruikt werd, is "hash" disabled!

Weet iemand een manier op de "Hash" functie te disabelen in PHP?

De foutmelding die we nu krijgen:
Fatal error: Cannot redeclare hash() in /var/include/functions/session.inc.php on line 18

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

php.net / HASH Message Digest Framework / Installing/Configuring
The Hash extension requires no external libraries and is enabled by default as of PHP 5.1.2.
Ik vermoed dat hij op regel 18 zelf de functie 'hash' registreerd heeft, die dus al standaard in PHP geregistreerd staat. Je zou in zijn script dus de function moet hernoemen naar een andere naam ( bijv. usr_hash() ) en alle hash(...) aanroepingen verder in het script/lib ook vervangen naar die naam.

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • slash24
  • Registratie: November 2002
  • Laatst online: 20-08 11:34
glashio schreef op maandag 04 augustus 2008 @ 10:28:
[...]

Ik vermoed dat hij op regel 18 zelf de functie 'hash' registreerd heeft, die dus al standaard in PHP geregistreerd staat. Je zou in zijn script dus de function moet hernoemen naar een andere naam ( bijv. usr_hash() ) en alle hash(...) aanroepingen verder in het script/lib ook vervangen naar die naam.
Regel 18 ziet er als volgende uit:
{
return bin2hex(mhash(MHASH_SHA256, $input));
}

Hierin zie ik dat de functie "mhash" gebruikt wordt. Mijn vraag is dus hoe ik "hash" als functie kan uitschakelen (dus niet zoals default enabled) en dus mhash kan gebruiken.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

slash24 schreef op maandag 04 augustus 2008 @ 12:38:
[...]


Regel 18 ziet er als volgende uit:
{
return bin2hex(mhash(MHASH_SHA256, $input));
}

Hierin zie ik dat de functie "mhash" gebruikt wordt. Mijn vraag is dus hoe ik "hash" als functie kan uitschakelen (dus niet zoals default enabled) en dus mhash kan gebruiken.
Maar daar wordt die functie niet gedeclareerd, daar wordt de functie 'mhash' gebruikt, als die niet zou bestaan zou je een andere foutmelding krijgen.
Echter mhash is obsolete, wellicht dat hij daar over zeurt? Probeer anders die Hash functies eens te gebruiken ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Dit is eigenlijk hoe de functie compleet uitziet.

function Hash($input) {
return bin2hex(mhash(MHASH_SHA256, $input));
}

Erkens je hebt het over het gebruiken van hash functies ipv mhash. In hoeverre moet de bonenstaande regel veranderen gebruik te maken van hash?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op maandag 04 augustus 2008 @ 13:54:
Dit is eigenlijk hoe de functie compleet uitziet.

function Hash($input) {
return bin2hex(mhash(MHASH_SHA256, $input));
}

Erkens je hebt het over het gebruiken van hash functies ipv mhash. In hoeverre moet de bonenstaande regel veranderen gebruik te maken van hash?
Jij bent dezelfde user als de topicstarter :?

Overigens zie je in de door jouw geposte code toch duidelijk dat daar de functie Hash wordt gedefineerd 8)7
Dat kan dus niet aangezien die al bestaat als "interne" functie van PHP. Met andere woorden:
glashio schreef op maandag 04 augustus 2008 @ 10:28:
[...]

Ik vermoed dat hij op regel 18 zelf de functie 'hash' registreerd heeft, die dus al standaard in PHP geregistreerd staat. Je zou in zijn script dus de function moet hernoemen naar een andere naam ( bijv. usr_hash() ) en alle hash(...) aanroepingen verder in het script/lib ook vervangen naar die naam.

Acties:
  • 0 Henk 'm!

Verwijderd

Thanks!!! Ik heb de functie anders genoemd en het werkt nu wel!!
Ik loop nu tegen wat andere problemen bij het inloggen maar ben in ieder geval stap verder!

De topic opener is mijn collega;)

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

Verwijderd schreef op maandag 04 augustus 2008 @ 14:17:
Thanks!!! Ik heb de functie anders genoemd en het werkt nu wel!!
En alle aanroepingen van 'hash(...)' ook veranderd ? Want jullie oorspronkelijk 'hash' functie heeft andere argumenten dan de geïntegreerde 'hash' functie. Dat verklaard misschien die andere problemen ;)

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

Verwijderd

glashio schreef op maandag 04 augustus 2008 @ 14:33:
[...]
En alle aanroepingen van 'hash(...)' ook veranderd ? Want jullie oorspronkelijk 'hash' functie heeft andere argumenten dan de geïntegreerde 'hash' functie. Dat verklaard misschien die andere problemen ;)
Ik heb voor zover ik weet alles hernoemd. Heb nu wat problemen met het weergeven van grafieken met jpgraph op een of andere manier.

JpGraph Error: HTTP headers have already been sent.
Caused by output from file mysql.inc.php at line 112.
Explanation:
HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it's image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).
Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser.

For example it is a common mistake to leave a blank line before the opening "<?php".

Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

verander in je php.ini eens deze volgende regel
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING
en hestart apache.

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

Verwijderd

Het zou heel goed kunnen dat je mysql.inc.php nu een error of een warning genereert. Als je deze file dan include in je script voor de grafieken krijg je die warnings/errors dus als output. Om die output te versturen worden de headers verstuurd, waardoor je geen headers meer kunt setten.
Dat grafieken script zal wel headers zetten voor de content-type etc. vermoed ik.

Oplossing: mysql.inc.php debuggen ;-)

[edit]
of wat Glashio zegt. Dan hoef je geen rekening te houden met warnings (of je dat wel of niet moet doen valt buiten dit topic ;-))

[ Voor 14% gewijzigd door Verwijderd op 04-08-2008 15:39 ]


Acties:
  • 0 Henk 'm!

Verwijderd

glashio schreef op maandag 04 augustus 2008 @ 15:38:
verander in je php.ini eens deze volgende regel
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING
en hestart apache.
Waar zorgt deze regel voor? Het werkt namelijk nog steeds niet.

En kan ik mysql.inc.php debuggen?

Acties:
  • 0 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Verwijderd schreef op maandag 04 augustus 2008 @ 16:20:
[...]

Waar zorgt deze regel voor? Het werkt namelijk nog steeds niet.

En kan ik mysql.inc.php debuggen?
Die regel fixed niets, maar genereert meer informatie die je kunt gebruiken bij het debuggen.

Wat die laatste foutmelding betreft: In "mysql.inc.php at line 112" wordt er iets naar de browser gestuurd (output) waardoor de headers verstuurd worden terwijl jpgraph eigenlijk nog wat had willen toevoegen. Dat moet je dus voorkomen in mysql.inc.php.

[ Voor 32% gewijzigd door Room42 op 04-08-2008 16:29 ]

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

Verwijderd

Room42 schreef op maandag 04 augustus 2008 @ 16:25:
[...]

Die regel fixed niets, maar genereert meer informatie die je kunt gebruiken bij het debuggen.

Wat die laatste foutmelding betreft: In "mysql.inc.php at line 112" wordt er iets naar de browser gestuurd (output) waardoor de headers verstuurd worden terwijl jpgraph eigenlijk nog wat had willen toevoegen. Dat moet je dus voorkomen in mysql.inc.php.
Wel raar dan, want deze script werkt wel op een andere systeem het enige wat ik heb gedaan is deze script naar een ubuntu systeem gekopieerd en probeer die nu te runnen. Line 112 van de file bestaat niet eens want de file bestaat uit 111 lines

Acties:
  • 0 Henk 'm!

Verwijderd

Dat zou een indicatie zijn dat je bijvoorbeeld een ; bent vergeten. Hierdoor loopt de regel 'oneindig' door, waardoor je uiteindelijk dus een fout krijgt als de php parser probeert om je script te parsen. Kan ook een " oid zijn.

Check eens of al je regels kloppen? Of (indien 't niet teveel regels zijn) post de inhoud van dat bestand eens? Wel even je gevoelige informatie (username, password) weghalen ;)

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Waar hoort mijn topic?

DTE>>PRG

[ Voor 8% gewijzigd door NMe op 04-08-2008 18:04 ]

'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!

  • Alain
  • Registratie: Oktober 2002
  • Niet online
Verwijderd schreef op maandag 04 augustus 2008 @ 16:50:
[...]

Wel raar dan, want deze script werkt wel op een andere systeem het enige wat ik heb gedaan is deze script naar een ubuntu systeem gekopieerd en probeer die nu te runnen. Line 112 van de file bestaat niet eens want de file bestaat uit 111 lines
Kan het zijn dat regel 112 een lege regel is? Wanneer je het bestand dan include verstuur je al informatie (een lege regel) naar de client en kun je dus geen headers meer sturen. :)

You don't have to be crazy to do this job, but it helps ....


Acties:
  • 0 Henk 'm!

Verwijderd

AlainS schreef op maandag 04 augustus 2008 @ 18:45:
[...]


Kan het zijn dat regel 112 een lege regel is? Wanneer je het bestand dan include verstuur je al informatie (een lege regel) naar de client en kun je dus geen headers meer sturen. :)
Het was inderdaad een lege regel en ik al die uren naar van alles zoeken.

Nogmaals bedankt iedereen!!!
Pagina: 1