L'exécution de PHP, linux “moins” commande via exec - fichier binaire d'avertissement

StackOverflow https://stackoverflow.com//questions/12709486

  •  13-12-2019
  •  | 
  •  

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 () 
Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top