Ich möchte aus meinem PHP-Skript scannen. Ich benutze Ubuntu 14.04 LTS, einen Brother MFC-7840W Scanner (im Büro) und einen Brother MFC-9840CDW (zu Hause). Ich kann vom Terminal und PHP scannen, wenn einer der Scanner als Netzwerk-Scanner an den Computer angeschlossen ist. Ich kann jedoch nicht von PHP aus scannen, wenn einer der Scanner als USB-Scanner an den Computer angeschlossen ist (ich kann immer noch vom Terminal aus scannen).
Warum kann mein PHP-Skript nicht auf die USB-Scanner zugreifen, aber $ USER kann?
Ich begann diese Frage bei der Arbeit, aber jetzt bin ich zu Hause, also werde ich meinen Versuch zeigen, auf den Brother MFC-9840CDW USB-Scanner von meinem PHP-Skript zuzugreifen.
Hier ist der Ausschnitt des PHP-Codes, den ich zum Scannen verwende:
%Vor% Das PHP-Skript funktioniert für die Netzwerk-Scanner, funktioniert aber nicht für die USB-Scanner.
Wenn ich einen der beiden USB-Scanner (derzeit MFC-9840CDW) auswähle und das Skript ausführe, wird in der Datei /var/log/apache2/error.log Folgendes angezeigt:
Es stellt sich die Frage: Ist das Gerät brother3:bus6;dev1
vorhanden?
Hier ist, was scanimage --list-devices
anzeigt, wenn es im Terminal zu Hause eingegeben wird (wo MFC-9840CDW ist):
Um zu demonstrieren, dass die USB-Scanner für $ USER arbeiten, gebe ich den folgenden Befehl in das Terminal ein:
%Vor%was zeigt:
%Vor%Um zu demonstrieren, dass Benutzer www-Daten nicht auf die USB-Scanner zugreifen können, gebe ich den folgenden Befehl in das Terminal ein:
%Vor%was zeigt:
%Vor%PHP kann nicht auf den USB-Scanner zugreifen, weil WWW-Daten (der Benutzer, der das PHP-Skript ausführt) kein Mitglied der Gruppe sind, zu der der USB-Scanner gehört. Fügen Sie den Benutzer www-data zu der Gruppe hinzu, zu der der USB-Scanner gehört.
Um die Gruppe zu finden, zu der der USB-Scanner gehört, muss der Name des USB-Scanners bekannt sein. Um den Namen des USB-Scanners zu finden, geben Sie den folgenden Befehl ein:
%Vor%zeigt (neben anderen Zeilen):
%Vor%Suchen Sie dann die Gruppe, zu der der USB-Scanner gehört, indem Sie den folgenden Befehl eingeben:
%Vor%was zeigt:
%Vor%Die Gruppe, zu der der USB-Scanner gehört, ist lp . Der Grund dafür, dass $ USER auf den USB-Scanner zugreifen kann, ist, dass $ USER ein Mitglied der Gruppe lp ist, www-data nicht. Dies wird demonstriert durch Eingabe des Befehls:
%Vor%was zeigt:
%Vor%Fügen Sie den Benutzer www-data strong> zur Gruppe lp hinzu, indem Sie folgenden Befehl eingeben:
%Vor% Testen Sie das Ergebnis erneut, indem Sie grep ^lp /etc/group
eingeben, was nun Folgendes anzeigt:
Starten Sie dann Apache neu, um sicherzustellen, dass die obigen Aktionen registriert sind:
%Vor%Testen Sie anschließend, ob www-Daten vom Terminal aus auf den USB-Scanner zugreifen können:
%Vor%was zeigt:
%Vor%Führen Sie dann das ursprüngliche PHP-Skript erneut aus, um zu sehen, ob es auf die USB-Scanner zugreifen und ein Dokument scannen kann ...
Erfolg!