[php] espeak uitvoeren via PHP

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • freyk
  • Registratie: September 2003
  • Laatst online: 03-10 07:14
Hallo,

Ik ben al een tijdje aan het experimenteren met de text-to-speech synthesizer espeak (1.43.03), onder Opensuse 12.1 met XAMPP 1.7.7.
Via de shell gaat het verloopt het vlekkeloos, maar ik krijg deze applicatie via PHP, niet aan de praat.

Code:
PHP:
1
2
3
4
<?php
//Espeak aanroepen, een tekst uitspreken en dan wegschrijven
exec('/usr/bin/espeak hallo -w /opt/lampp/htdocs/hallo.wav');
?>


Het volgende heb ik de volgende gevonden mogelijke oplossingen getest:
  • system(), passtrhu() krijgen espeak ook niet aan de praat.
  • schrijfrechten controleren: deze zullen goed staan omdat ik fwrite een bestanden weg kan schrijven onder nobody - nogroup.
  • via php, bash- & perl-scripts uitvoeren die op hun beurt espeak aanroepen: commando's worden netjes uitgevoerd, maar espeak weer niet. (zie het ook niet in processenlijst verschijnen)
  • met use nobody, espeak uit laten voeren: doet hij goed.
  • Verschillende oplossingen (inclusief boven aangegeven) getest, aangegeven op het forum van espeak op sourceforge.net
  • php-speak: lukte mij niet om het te compileren. (heb hier ook nog niet zoveel ervaring in)
  • Ik wil best naar een andere tts voor linux kijken. Het liefst een met mbrola ondersteuning.
Weten jullie nog andere oplossingen?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Wat gebeurt er als je php via de command line draait?
Wat gebeurt er als je de output van espeak via "> /path/to/writable/file" naar een bestand schrijft?

Acties:
  • 0 Henk 'm!

  • freyk
  • Registratie: September 2003
  • Laatst online: 03-10 07:14
Wanneer ik mijn script via commando php uitvoer (sudo /opt/lampp/bin/php ./spraak.php), werkt het opeens wel.
Moet ik hem in php anders aanroepen of wat moet ik doen om het probleem op te lossen?

[ Voor 3% gewijzigd door freyk op 03-01-2012 22:31 ]


Acties:
  • 0 Henk 'm!

  • Mercatres
  • Registratie: September 2009
  • Laatst online: 12:50
Volgens mij heeft php zelf niet voldoende rechten om dat uit te voeren.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:09
Mercatres schreef op dinsdag 03 januari 2012 @ 22:34:
Volgens mij heeft php zelf niet voldoende rechten om dat uit te voeren.
Wat ik zo snel kan vinden kan dit kloppen. Om espeak te kunnen gebruiken moet je in de "audio" groep zitten. Apache draait meestal met een eigen user (vaak www-data) met beperkte rechten. Om het te laten werken moet TS die dan aan de audio-groep toevoegen.

Je introduceert hiermee wel een veiligheidsrisico. Apache zat niet voor niets _niet_ in die groep. Ik zie er zelf niet zoveel kwaad in, zeker niet als je aan het experimenteren bent. Maar dan ben je iig gewaarschuwd ;)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • spleethoven
  • Registratie: Oktober 2010
  • Laatst online: 24-01-2024
Het enigste wat me zo direct opvalt is dat je php via command line uitvoert je sudo gebruikt (sudo /opt/lampp/bin/php ./spraak.php). Het feit dat het dan wel werkt wijst op rechten die niet goedstaan.

Zoals hierboven al geopperd is zou ik eens gaan kijken in welke groep je je user moet zetten.

Acties:
  • 0 Henk 'm!

  • freyk
  • Registratie: September 2003
  • Laatst online: 03-10 07:14
Zoals de andere al dachten, wil ik het nu ook bevestignen: het probleem zit inderdaad in de rechten.
Waneer ik een standaard webserver onder opensuse opzet, een op-locatie-aangepast script via mijn browser draai, verschijnt er een geluidsbestand (met wwwrun als eigenaar) in de /tmp map.
(webserver draait ook onder de gebruikers root en wwwrun).
Bij xampp ligt dat iets anders, daar wordt de server gestart onder gebruikers root en nobody.

Probleem zit dus niet in de script maar in het rechtensysteem.
Ik zal eens wat verder kijken. Jullie horen nog van mij.

(mod mag hem wel verplaatsen naar nos)

[ Voor 3% gewijzigd door freyk op 04-01-2012 22:32 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
freyk schreef op woensdag 04 januari 2012 @ 22:30:
(mod mag hem wel verplaatsen naar nos)
Doe de volgende keer even een Topic Report (Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/icon_hand.gif), dan hoef ik niet alle posts in alle topics te lezen ;) :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 04-10 19:01
even voor de compleetheid, wat ook nog wel eens gebruikt wordt door mij ( het is niet HEEL netjes, maar het werkt! )

code:
1
www-data ALL= NOPASSWD: /usr/sbin/RandomAppje

Acties:
  • 0 Henk 'm!

  • Sir Isaac
  • Registratie: September 2002
  • Laatst online: 21-05 20:45
@Xantios: dat is toch juist wèl netjes: www-data kan niets anders doen dan randomappje uitvoeren? Op deze manier laat ik een webserver een proxy herstarten nadat ik de whitelist heb aangepast.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Xantios schreef op vrijdag 06 januari 2012 @ 16:46:
even voor de compleetheid, wat ook nog wel eens gebruikt wordt door mij ( het is niet HEEL netjes, maar het werkt! )

code:
1
www-data ALL= NOPASSWD: /usr/sbin/RandomAppje
even voor de compleetheid, dit moet in de sudoers file

Acties:
  • 0 Henk 'm!

  • Xantios
  • Registratie: Maart 2006
  • Laatst online: 04-10 19:01
Sir Isaac schreef op vrijdag 06 januari 2012 @ 17:06:
@Xantios: dat is toch juist wèl netjes: www-data kan niets anders doen dan randomappje uitvoeren? Op deze manier laat ik een webserver een proxy herstarten nadat ik de whitelist heb aangepast.
Ja en nee, het is er niet helemaal voor gebouwd maar het is wel (redelijk) veilig en werkt als een trein!

Verder is het ( Dit is even gebasseerd op debian en vi ) heel simpel inderdaad:

$ sudo visudo
i
www-data ALL= NOPASSWD: /usr/sbin/xentop
escape wq {enter}


en klaar is klara! ( zoals je hierboven ziet, ik gebruik het om met PHP een schil om Xen heen te vrotten )

Acties:
  • 0 Henk 'm!

  • freyk
  • Registratie: September 2003
  • Laatst online: 03-10 07:14
ik heb mijn probleem opgelost door xampp te vervangen met de opensuse apache server, een nieu mapje aan de maken met wwwrun als owner (daar de media bestanden weg te schrijven) en geen wijzigingen in de eigenscappen van de gebruiker.
Pagina: 1