2012-03-31 3 views
8
PHP는 PHP 여기에 5.3를 실행하는 내 맥 활성화를 위해 나는 pdo_odbc 확장을 얻기 위해 노력하고 있어요

내가 일하러하려고했던 것입니다 :활성화 PHP의 pdo_odbc 확장 맥 OSX

  1. 양조와 함께 UnixODBC를 설치했습니다.

  2. PHP 5.3.8의 소스를 다운로드했습니다. 터미널에서 pdo_odbc 폴더로 이동했습니다. 그런 다음 다음을 수행하십시오.

    $ phpize 
    $ ./configure --with-pdo-odbc=unixODBC 
    $ make 
    

    오류가있었습니다. 어떤 블로그를 기반으로

    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c:43: error: ‘ZEND_MOD_END’ undeclared here (not in a function) 
    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c: In function ‘zm_startup_pdo_odbc’: 
    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c:135: warning: cast to pointer from integer of different size 
    

    나는 {NULL,NUll, NULL}ZEND_MOD_END를 교체하고 다시 만들 달렸다. 이번에는 그것을 준수했습니다.

  3. 그런 다음 "sudo make install"을 실행하여 올바른 위치에 확장 프로그램을 설치했습니다. php.ini를 수정하기 위해 수정했습니다. 그리고 phpInfo()에 나타납니다.

지금까지 그렇게 좋았습니다. 나는 간단한 테스트 실행을 시작하지만 나는이 코드를 실행하려고 할 때 다른 모든에 대한 오류,

php(20048,0x7fff796f1960) malloc: *** mmap(size=2977160837258543104) failed (error code=12) 
*** error: can't allocate region 
*** set a breakpoint in malloc_error_break to debug 
terminate called throwing an exceptionAbort trap: 6 

는 던져졌다하려고 얻을 :

<?php 

    $dsn = 'odbc:Driver={FileMaker ODBC};Server=localhost;Database=CalDAV;'; 
    $pdo = new PDO($dsn, "odbc", "odbc"); 

    $sql = "SELECT * From Users Where id = 2"; 
    $r = $pdo->query($sql); 
    print_r($r->fetch(PDO::FETCH_ASSOC)); 

    $sql = "SELECT * From Users Where id = ?"; 
    $stmt = $pdo->prepare($sql); 
    $stmt->execute(array(2)); 
    print_r($stmt->fetch(PDO::FETCH_ASSOC)); 

?> 

이 라인은 예외가 발생합니다.

$stmt->execute(array(2)); 

누구나 pdo_odbc를 Mac에서 사용할 수있는 경험이 있습니까? 이 확장 기능을 사용하고 싶습니다. 제안?

+0

확실하지 않다. – Kevin

+0

PDO_ODBC 확장에 버그가있는 것 같습니다 : https://bugs.php.net/bug.php?id=52942 내 생각에 이미 할당 된 메모리를 할당하는 잘못된'malloc()'호출입니다. –

+0

Kevin, php5-odbc가 PDO가 아닌 오래된 ODBC 확장 일뿐입니다. Mac에서 PDO-ODBC 확장을 사용하려고합니다. – toddgeist

답변

0

'memory_limit'설정이 충분히 높은지 php.ini (또는 이에 상응하는 도구)를 확인 했습니까?

오류 12는 메모리 고갈과 관련이있는 것으로 보이지만 실행중인 테스트의 런 어웨이 루프와 관련이 있는지 또는 너무 많은 할당이 있는지는 잘 모르겠습니다. phpinfo() 덤프가 현재 'memory_limit'설정에 대해 말하는 것을 확인한 다음 오류가 수정되었는지 확인하십시오.

은 참조 : 애플은 맥 OS X에 대한 (인 unixODBC 이상)이 iODBC를 선택하고 재규어 (10.2)로 시작에 번들 것을주의 아마도 가치가

2

. Apple이 공식 프로젝트 패치를 계속 사용하지 않았기 때문에 latest update from the iodbc.org site을 얻어야합니다. Frameworks 등을 설치하고 Apple 번들 헤더 및 dylib에 별도의 패치를 적용하는 것이 좋습니다.

UnixODBC와 관련된 과거 malloc 문제는 iODBC로 전환하여 해결되었습니다. 나는 이것이 당신에게 해당 될지는 모르지만, 시도하는 것은 적은 투자로 보입니다.

(ObDisclaimer : 저는 OpenLink Software으로 일하며, 우리는 iODBC 프로젝트를 유지 관리하고 지원합니다.이 옵션을 추구하는 데는 개인적으로 아무런 이득도 얻지 못합니다.)

-2

저는 MacBook에서 Ubuntu Server Distro와 함께 VirtualBox를 사용하고 있습니다.

OSX 업데이트로 인해 설정이 손상 될 수 있다는 사실을 알고 있습니다.

  • 버추얼 (AN 호스트 전용 어댑터 포함) (20기가바이트의 VDI)
  • 우분투 리눅스 서버
  • LAMP (아파치, MySQL은 & PHP)
  • 삼바 (내 웹 프로젝트를 관리하기 위해)

개발 작업에 매우 효과적이므로 종속성 문제를 제대로 염두에 둘 필요가 없습니다.

0

나는 개인적으로 MacPorts를 선호하지만, 대부분의 사람들은 Fink를 선호한다고 생각합니다. OSX 용 표준 유닉스 패키지의보다 완벽한 기능의 버전을 얻는 가장 쉬운 방법은 MacPorts 또는 Fink를 사용하는 것입니다. 거기 양조와 동일하지만 난 그냥 "sudo는 포트 PHP5-ODBC 설치"를 실행하고 쉽게 설치할 경우

Locate the php.ini file on your Mac (/etc/php.ini) 
Replace all instances of /var/mysql/mysql.sock to /tmp/mysql.sock 
Save the file and restart Apache.