2012-03-31 57 views
8

tôi đang cố gắng để có được những phần mở rộng pdo_odbc cho PHP được kích hoạt trên máy Mac của tôi mà đang chạy PHP 5.3 Đây là những gì tôi đã làm để cố gắng có được nó để làm việc:Cho phép mở rộng PHP pdo_odbc trên máy Mac OSX

  1. Tôi đã cài đặt UnixODBC với brew

    $ brew install unixodbc 
    
  2. Đã tải xuống nguồn cho PHP 5.3.8. Trong terminal tôi điều hướng đến thư mục pdo_odbc. Sau đó làm như sau.

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

    Đã xảy ra lỗi.

    /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 
    

    Dựa trên một số blog tôi thay ZEND_MOD_END với {NULL,NUll, NULL} và chạy làm một lần nữa. Lần này nó tuân thủ.

  3. Sau đó, tôi chạy "sudo make install" và cài đặt tiện ích ở đúng nơi. Tôi modifed php.ini để kích hoạt nó. Và nó hiển thị trong phpInfo()

Cho đến nay rất tốt. Nhưng khi tôi bắt đầu chạy thử nghiệm đơn giản tôi nhận lỗi về tất cả các khác thử

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 

này bị ném, khi tôi đã cố gắng để thực thi mã này:

<?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)); 

?> 

dòng này gây ra ngoại lệ.

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

Có ai có kinh nghiệm nhận pdo_odbc để làm việc trên máy Mac hay không. Tôi thực sự muốn mở rộng tiện ích này. Gợi ý?

+0

không chắc chắn nếu có một brew tương đương nhưng tôi chỉ chạy "sudo port install php5-odbc" và nó được cài đặt dễ dàng. – Kevin

+0

Có vẻ như có một lỗi trong phần mở rộng PDO_ODBC: https://bugs.php.net/bug.php?id=52942 Đoán của tôi là một cuộc gọi xấu 'malloc()' để phân bổ bộ nhớ đã được cấp phát. –

+0

Kevin, tôi khá chắc chắn rằng php5-odbc chỉ là phần mở rộng cũ không PDO ODBC cũ. Tôi đang cố gắng để có được phần mở rộng PDO-ODBC đi trên mac. – toddgeist

Trả lời

0

Bạn đã kiểm tra php.ini của mình (hoặc tương đương) để xem cài đặt 'memory_limit' của bạn có đủ cao không?

Lỗi 12 dường như có liên quan đến cạn kiệt bộ nhớ, nhưng tôi không chắc liệu nó có liên quan đến vòng lặp chạy trong các thử nghiệm bạn đang chạy hay đơn giản là quá nhiều phân bổ rất lớn. Kiểm tra những gì một phpinfo() dump nói về thiết lập 'memory_limit' hiện tại của bạn và sau đó lên nó để xem nếu điều đó sửa lỗi.

Xem thêm:

2

Có lẽ đáng chú ý rằng Apple đã chọn iODBC (trên UnixODBC) dành cho Mac OS X và đóng gói nó trong bắt đầu với Jaguar (10.2). Bạn sẽ nhận được latest update from the iodbc.org site, bởi vì Apple chưa bao giờ cập nhật các bản vá lỗi chính thức của dự án. Tôi khuyên bạn nên cài đặt cả hai Framework và như vậy, và áp dụng các bản vá riêng biệt cho các tiêu đề và các dylibs của Apple.

Các vấn đề malloc cũ liên quan đến UnixODBC đã được giải quyết bằng cách chuyển sang iODBC. Tôi không biết rằng đây sẽ là trường hợp của bạn, nhưng có vẻ như một khoản đầu tư nhỏ để thử.

(ObDisclaimer: Tôi làm việc cho OpenLink Software; chúng tôi duy trì và hỗ trợ dự án iODBC. Cá nhân tôi không nhận được gì từ việc bạn theo đuổi tùy chọn này.)

-2

Tôi đang sử dụng VirtualBox với Ubuntu Server Distro trên MacBook của mình.

Vì tôi đã nhận thấy rằng một bản cập nhật OSX có thể làm hỏng cấu hình của bạn.

  • VirtualBox (20GB VDI)
  • Ubuntu Linux Server (với một adapter host-only)
  • LAMP (Apache, MySQL & PHP)
  • Samba (Để quản lý của tôi web dự án)

Hoạt động tốt để phát triển và bạn không cần phải lo lắng về các phụ thuộc được chuyển đúng cách!

0

Cá nhân tôi thích MacPorts, mặc dù tôi nghĩ hầu hết mọi người đều thích Fink. Cách dễ nhất để có được nhiều phiên bản đầy đủ tính năng của gói unix tiêu chuẩn cho OSX là sử dụng MacPorts hoặc Fink.

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. 
Các vấn đề liên quan