L'exécution de PHP, linux “moins” commande via exec - fichier binaire d'avertissement
Question
- Je convertir des fichiers PDF en fichiers TXT.Je me retrouve avec des "moins" de commande, par exemple parce que les pdftotext a quelques problèmes avec les tables au format PDF.Le problème est que lorsque j'ai exécuté la commande de fonction exec (ou shell_exec/système), moins juste en me montrant de l'information, qui a choisi le format PDF est un fichier binaire et de fichier résultat est juste TXT PDF avec les données qu'il contient.Mais quand je fais la même chose normalement dans le terminal, tout est ok.J'ai aussi essayé de vous connecter en tant www_data de l'utilisateur et a couru de commande en tant que cet utilisateur, mais il ya aussi pas de problème.
Commande:
$ less /var/www/original.pdf > /var/www/new.txt
Code PHP:
exec("less -f /var/www/original.pdf > /var/www/new.txt 2>&1");
Résultat de PHP exec:
"/var/www/original.pdf" may be a binary file. See it anyway?
L'option "-f" dans la commande exec est là parce que vous n'avez pas besoin d'appuyer sur "y" pour "oui, je veux le voir de toute façon."
set | grep less
rendements:
LESSCLOSE='/usr/bin/lesspipe %s %s'
LESSOPEN='| /usr/bin/lesspipe %s'
Lossless LZW RLE Zip' -- "$cur" ));
_apport_parameterless
_apport_parameterless
_apport_parameterless
_apport_parameterless
_apport_parameterless ()
La solution
De ce que j'ai lu, votre console est capable d'afficher un fichier PDF avec less
parce que vous avez un apport de préprocesseur installé, comme lesspipe
ou lessfile
.La façon de faire less
l'utilisation de ces préprocesseur est par la lecture d'une variable d'environnement appelée LESSOPEN, qui pointe à la lesspipe
et lessfile
script.
Il y a peut-être un moyen de votre serveur, par l'intermédiaire de variables d'environnement shell et commandes, pourrait être en mesure de reproduire ce comportement, de sorte que vos appels à l' less
analyser les fichiers Pdf correctement.
Ce que je suggère, serait d'appeler un script bash pour faire la conversion pour vous au lieu de l'appeler less
directement.De cette façon, votre script bash serait en mesure de définir les variables d'environnement et d'exécuter les commandes appropriées pour convertir vos fichiers PDF lisible de sortie.
Voici un exemple de comment faire ceci:
#!/bin/bash
eval $(lesspipe)
less $1 > $2 2>&1
Puis, à partir de PHP, appelez ce script comme ceci:
exec("/path/to/your/script/script.sh /var/www/original.pdf /var/www/new.txt");
Si cela ne fonctionne pas, essayez de changer eval $(lesspipe)
pour eval $(lessfile)
.
Autres conseils
Tout d'abord, le moins est un programme interactif pour lire le texte de ruisseaux.Dans ce contexte, vous devez utiliser cat
au lieu de cela.Cette ou entendu ne fonctionne pas, soit depuis le format PDF est un format binaire, par opposition à base de texte.
Pourquoi n'utilisez-vous pas un fichier pdf au convertisseur de texte comme pdftotext
?
Comment était le code PHP exécuté?Sur la ligne de commande, via php file.php
ou par un serveur Web lorsque vous le frappez avec un navigateur http://servername/something/file.php
?
Une conjecture est que le less
lorsque vous exécutez le faire sur la ligne de commande n'est pas la même less
lorsque le code PHP est exécuté.