Ler JPEG

Tenho um form para upload de imagens, preciso ler as informações do JPEG, uso $exif = exif_read_data(‘FOTO 1.JPG’, 0, true); porem dá Fatal error: Call to undefined function exif_read_data() in /opt/NetMake/v81/wwwroot/scriptcase/app/Fotografia/blank/index.php on line 1122.

Já alterei o PHP.INI.

Alguem pode ajudar

;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_fileinfo.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_exif.dll ; Must be after mbstring as it depends on it
;extension=php_mysqli.dll
;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_fileinfo.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
extension=php_exif.dll ; Must be after mbstring as it depends on it
;extension=php_mysqli.dll
;extension=php_oci8_12c.dll ; Use with Oracle Database 12c Instant Client
;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll

O servidor está rodando em Windows ou Unix? Se for Unix, qual distro?

Porque pelo diretório mostrado na mensagem de erro, não parece ser Windows… mas você está carregando DLL’s?

ubuntu 16.04

Você deve carregar as bibliotecas .so
Exemplo:
extension=php_mbstring.so
extension=php_gd2.so

Logo, para carregar a exif tem que fazer:
extension=exif.so
Lembrando que para o exif funcionar o mbstring também tem que ser carregado.

Sou novo no linux, como faço para carregar essas bibliotecas?, coloquei no php.ini mas não funcionou, como faco para testar se está carregado?

Eu nunca usei o instalador automático da Netmake.
Neste não sei dizer.
Se fosse uma instalação manual ainda poderia te ajudar.

“Para habilitar suporte a exif configure o PHP com --enable-exif”
http://php.net/manual/pt_BR/exif.installation.php

Se der para compilar a extensão do tipo “shared”, eu posso te passar. Vou verificar, e te informo.

Pelo que eu vi aqui no instalador do Scriptcase 8.1 o exif não vem habilitado por padrão.
E já que o Ronyan deu a dica.

Praticamente terá que:

  1. Baixar os fontes do php
  2. extrair os fontes.
  3. Entrar na pasta descompactada: exemplo cd php-5.6.XX/ext/exif/
  4. Rodas os comandos na sequência:
    a) phpize
    b) ./configure --enable-exif=shared
    c) make
    Observação: não faça make install ou irá sobrepor uma possível instalação do exif no php da distro se este estiver instalado.
  5. Dentro da pasta php-5.6.XX/ext/exif/modules irá encontrar a biblioteca compilada exif.so.
  6. Copie ela para dentro da instalação do scriptcase no lugar onde ficam as outras bibliotecas.

Após isto irá funcionar.

Observação: seu ambiente tem que estar preparado para compilar o PHP. OK?

PS: Baixe a mesma versão do php do instalador do Scriptcase

Compilei para PHP 5.6.26 64bits.
Mas deve funcionar na sua versão do instalador.
http://www.simaoebuhler.com.br/downloads/exif.so
Baixe e teste.
Amanhã irei apagar o exif.so do meu servidor.

Dica: Use instalação manual com Scriptcase. As coisa serão mais fáceis.

Deve-se compilar o PHP para a arquitetura 32bits ( caso esteja em uma distro 64bits ).
– CFLAGS="-m32" CXXFLAGS="-m32"
O PHP do ScriptCase é compilado para a arquitetura 32bits. Pois são os mesmos fontes para windows, linux e mac. E o PHP 5.6 não está estável para 64bits :
http://windows.php.net/download#php-5.6
VC11 x64 Non Thread Safe (2016-Oct-14 20:34:03)
Note: x64 builds are currently experimental ( http://windows.php.net/download#x64 )

Tem que adicionar no final do php.ini do scriptcase:
extension=exif.so

( /opt/NetMake/v81/components/apache/conf/ )

Ronyan,
Esta nota: Note: x64 builds are currently experimental ( http://windows.php.net/download#x64 )
Somente é válida para windows.
No GNU/Linux o php compilado em 64 bits está estável a bastante tempo.

Tentei compilar com as flags -> CFLAGS=-m32 CPPFLAGS=-m32 CCASFLAGS=-m32
Conforme: http://stackoverflow.com/questions/10066587/compile-php-extension-on-64bit-debian-to-32bit-php-installation

folhape pode tentar baixar o arquivo e ver se deu certo minha compilação.

http://www.simaoebuhler.com.br/downloads/exif.so

Se não der certo por favor compile para ele Ronyan.

Então, mas como o instalador para windows,linux e mac é gerado a partir dos mesmos fontes binários, é utilizado o de 32bits.

A partir deste link aí ocorreu o erro de class.
/opt/NetMake/v81/components/apache/ext/exif.so: wrong ELF class: ELFCLASS64 in Unknown on line 0
A extensão ainda foi compilada com a arquitetura 64bits.
Vou compilar e disponibilizar.

Obrigado

Segue extensão abaixo:
https://goo.gl/6kzmGF

Compilada para PHP 5.6 ( 32bits )

Copiar e colar em:
/opt/NetMake/v81/components/apache/ext

Adicionar ao final do php.ini:
extension=exif.so

Reiniciar o apache do scriptcase:
/etc/init.d/apachesc81 restart

Acessar: ip:porta/scriptcase/info.php
procurar por exif. vai estar como abaixo:
exif
EXIF Support enabled
EXIF Version 1.4 $Id: 8b0e34c10dc8a04b8e81d9d79985b2566141b03d $
Supported EXIF Version 0220
Supported filetypes JPEG,TIFF

Foi possível compilar com os comandos abaixo ( Debian 8 64 bits ):

dpkg --add-architecture i386
apt-get update
apt-get install g+±multilib libc6-dev-i386 libxml2-dev:i386
./configure --host=i386-linux-gnu “CFLAGS=-m32” “CXXFLAGS=-m32” “LDFLAGS=-m32” --prefix=/opt/php56 --enable-exif=shared

Onde:
–host: Refere-se ao tipo de arquitetura da extensão que será disponibilizada. ( i386,i686,x86_64 )
*FLAGS refere-se ao tipo de arquitetura do compilador g++ que será utilizado.

Toda as extensões do tipo “shared” são encontradas em ~/php5.6.x.x/modules/

Obrigado por compartilhar os comandos Ronyan.

fiz o procedimentos acima mas nao deu certo.

mbstring
Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation disabled
libmbfl version 1.3.2

A extensão que irá ser habilitada é a “exif”

Já copiei e não consigo usar o EXIF(), alguem poderia explicar mais detalhadamente, não tenho experiencia com linux, obrigado

folhape,
Talvez seja melhor pegar uma consultoria para ver como esta seu ambiente.

Executa os comandos abaixo:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install g+±multilib libc6-dev-i386 libxml2-dev:i386 build-essential
sudo /etc/init.d/apachesc81 restart

Verifica se habilitou.