sql >> Database >  >> RDS >> PostgreSQL

.pgpass van Apache gebruiken libphp5.so

Ook al heeft php PGPASSFILE in de omgeving erft het van apache, zoals bewezen door getenv("PGPASSFILE") , lijkt het erop dat deze omgeving niet de omgeving is die beschikbaar is voor de gedeelde libpq bibliotheek die uiteindelijk .pgpass afhandelt . Daarom wordt deze instelling genegeerd.

Een tijdelijke oplossing is om de variabele die er al is in php in de omgeving te plaatsen voordat u verbinding maakt met de database:

if (getenv("PGPASSFILE")!="")
  putenv("PGPASSFILE=".getenv("PGPASSFILE"));

De expliciete putenv zal de variabele pushen op een manier die het beschikbaar maakt voor libpq 's aanroepen van getenv() . Dit is raar aangezien een proces normaal gesproken maar één omgeving heeft, maar het lijkt te werken.

Ik heb gevraagd naar het dissonante omgevingsprobleem tussen extensies en de kern van php in een aparte vraag:Waarom is putenv() nodig op een reeds gedefinieerde omgevingsvariabele?




  1. PHP-fouten -> Waarschuwing:mysqli_stmt::execute():Kon mysqli_stmt niet ophalen | Waarschuwing:mysqli_stmt::close()

  2. Ik kreeg een foutmelding Niet-ondersteund opzoeken 'icontains' voor CharField of deelnemen in het veld niet toegestaan.

  3. Hoe u een buitenlandse sleutelfout kunt oplossen bij het uitvoeren van migratie

  4. MySQL Proxy-alternatieven voor database-sharding