编译新的 pdo PDO_4D

Compiling a new pdo PDO_4D

我们有 32 个客户数据库,有些很大,有数百万条记录(V.11。目前,托管和构建在 Mac 上)。我在 Windows 2012 64x Server 上建立了一个网站,并包含了最新版本的 PDO 和 PHP 版本(Xamp 2.5 和 PHP/5.3.8 )。插件和 Apache 是 32x。

我的网页连接到 4d sql 服务器上的所有 32 个客户端,并运行几个 SQL select 采石场。我遇到的问题几乎无法描述。在某些搜索条件下,它有时有效,有时无效。我的意思是,如果我搜索 "jone doe" 它确实会给我结果,而如果我更改后者则不会,SQL 客户端上的连接处理程序保持挂起状态并且网页会超时。

请注意,没有模式。一些搜索挂在一个客户端上。一些在 2 或 3 上。不同的搜索是相同的,但不同的客户端。只有一个特定数量的 13 个字符的搜索通过了所有客户端,并且运行良好。我还要说我的目标是特定的表和列,所以我确定我的 SQL 查询不是问题,我的搜索框很少,而且它们都是单一搜索,没有 OR 或 AND SQL,我还 select 大约 4-6 列来显示那个 select 查询的结果。

此外,这一切都在专用网络上进行。所以连接也不是问题。我要补充一点,每个连接的结果最多可以是 0 - 50。这是精简的代码示例:

连接已定义,这是其余代码:

function trazi($dbaza) { 
    global $db; global $db2; global $db3; global $db4; global $db5; global $db6; global $db7;  
global $db8; global $db9; global $db10; global $db11;   global $db12; global $db13; global  
$db14; global $db15; global $db16; global $db17; global $db18; global $db19; global $db20;  
global $db21; global $db22; global $db23; global $db24; global $db25; global $db26; global $db27; 
 global $db28; global $db29; global $db30; global $db31; global $db32;  
    global $inime; global $inoib; global $inbb; global $inbbroj; global $insb; 

    $odabrani = $dbaza->prepare('SELECT  STANJE, SUD_BROJ_O, SUD_BROJ_P, SUD_BROJ_JBR , NAZIV_LONG, OIB FROM PREDMETI WHERE SUD_BROJ_O = ? '); 
    $params = array($insb); 
    $odabrani->execute($params); 
    $rezultat = $odabrani->fetchAll(PDO::FETCH_ASSOC); 
unset($dbaza); 
unset($odabrani); 

if ($rezultat) { 


            <th>Ime i prezime</th>  
            <th>OIB</th> 
            <th>Bilježnički broj</th> 
            <th>Sudski parnički broj</th> 
            <th>Sudski ovršni broj</th> 
            <th>Stanje predmeta</th>';

    foreach($rezultat as $row) {
            echo "<tr>
            <td>".$row['NAZIV_LONG']. "</td>".
            "<td>".$row['OIB']."</td>".
            "<td>".$row['SUD_BROJ_JBR']."</td>".
            "<td>".$row['SUD_BROJ_P']."</td>".
            "<td>".$row['SUD_BROJ_O']."</td>".
            "<td>".$row['STANJE']."</td>".
            "</tr>";                
            } 
    echo "</table>"; 
    } else {
        echo "Vaša pretraga nije pronašla niti jedan rezultat.";
        }

}

unset($rezultat);


//ATLANTIC
echo '<br><br><div style="color:#922E19">ATLANTIC</div>';   
trazi($db);
ob_implicit_flush(true);
$buffer = str_repeat(" ", 4096);
echo $buffer;
ob_flush(); usleep(300000);

//CEDEVITA
echo '<br><br><div style="color:#922E19">CEDEVITA</div>';    
trazi($db2); 
ob_implicit_flush(true); 
$buffer = str_repeat(" ", 4096); 
echo $buffer; 
ob_flush(); usleep(300000); 

ETC... 

我真的希望这个 PDO 限制是问题所在,因为在某些查询中它 select 数据太多并且中断。

问题:我已经更改了 4d PDO 源文件并更改了限制。但我无法编译它,我也不知道如何编译。我没有 PC,我的服务器对这个主题没有用,我在 Mac。有人可以帮我用这个更改编译一个 DLL 吗?我将附上一个包含所做更改的 zip 文件。

http://forums.4d.fr/4DBB_Main/x_User/18851165/files/18851204.zip

编辑;或者有人可以通过错误修复为我编译这个版本吗? https://github.com/famsf/pecl-pdo-4d

我正在使用 PHP/5.3.8 32 位。

如果有人看到这个帖子,请回答is here。编译工作就像它所说的那样,毕竟原始驱动程序有问题。这个版本有效。我在 Ubuntu 上托管我的脚本并编译了一个新的驱动程序并且它连接到 32 个数据库没有错误。

您将需要 Ubuntu 12.04 并按照以下代码操作。

# Install dependencies (You may need more)
sudo apt-get install php5-dev
# Clone a working version of the code from the FAMSF repo
git clone https://github.com/famsf/pecl-pdo-4d.git pdo_4d
cd pdo_4d
# Prepare the PHP extension for compiling
phpize
# Workaround acinclude.m4 pointing to incorrect header location.
# See: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1393640
sudo ln -s /usr/include/php5/ /usr/include/php
# Configure the package to the system
./configure --with-pdo-4d
# Compile!
make
# Copy the extension to PHP's library
sudo make install
# Create php5 module configuration file for PHP 5.4/5.5
sudo sh -c "echo extension=pdo_4d.so > /etc/php5/mods-available/pdo_4d.ini"
# Enable the module for PHP 5.4/5.5
sudo php5enmod pdo_4d
# Enable the module for PHP 5.3
sudo sh -c "echo extension=pdo_4d.so > /etc/php5/conf.d/pdo_4d.ini"
# Restart apache
sudo apache2ctl restart
# Check for PDO_4D in the PHP CLI Information
php -i | grep 4D

您只需为下面的步骤创建自己的文件夹即可;

sudo sh -c "echo extension=pdo_4d.so > /etc/php5/mods-available/pdo_4d.ini

文件夹mods-available,一切都会如其所说,在此之前,只需安装PHP和Apache,但为此您可以在网上找到很多解释。这只是一行命令,剩下的由 Linux 完成。

也跳过 # 为 PHP 5.4/5.5 启用模块,因为 Ubuntu 将有 5.3,这就是你所需要的。

为 php 7.0 编译 PDO_4D。在 ubuntu 16.04 32 位上,32 很重要,因为驱动程序是为 32 系统制作的,或者至少我认为它很重要...

首先你需要对应php版本的驱动和php。 我推荐这个经过测试的驱动程序版本:http://git.thesecretgamer.de/faldon/pdo_4d.git

重要提示:在安装 php 和 Apache 之前首先升级和更新您的系统,因为如果您稍后这样做,它将安装 php 7.1 并且驱动程序对我不起作用。

//正在安装服务器

sudo apt-get update
sudo apt-get install apache2
sudo apt-get install python-software-properties
sudo apt install php7.0-cli
sudo apt-get install php7.0-dev
sudo apt-get install php7.0-mbstring <--- for some reason you will need this, trust me. 
sudo apt-get install libapache2-mod-php7.0
apt install git

//编译

# Install dependencies (You may need more)
sudo apt-get install php7.0-dev <--- I did this in steps before so skip it.
# Clone a working version of the code from the FAMSF repo
git clone http://git.thesecretgamer.de/faldon/pdo_4d.git pdo_4d <----- or just unpack your modified driver with your changes where ever you wont.
cd /var/4d/pdo_4d <------- navigate to driver folder
# Prepare the PHP extension for compiling
phpize
# Workaround acinclude.m4 pointing to incorrect header location.
# See: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1393640 <---- this may be fixed for php 7.0 but i did it anyway.
sudo ln -s /usr/include/php/20151012/ /usr/include/php
# Configure the package to the system
./configure --with-pdo-4d
# Compile!
make
# Copy the extension to PHP's library
sudo make install
# Create php module configuration file for PHP 7.0
sudo sh -c "echo extension=pdo_4d.so > /etc/php/7.0/mods-available/pdo_4d.ini"
# Enable the module for PHP 
sudo phpenmod pdo_4d
sudo sh -c "echo extension=pdo_4d.so > /etc/php/7.0/apache2/conf.d/pdo_4d.ini"
# Restart apache
sudo service apache2 restart
# Check for PDO_4D in the PHP CLI Information
php -i | grep 4D
php -m

现在请记住,可能有一些不必要的步骤,但这很有效,我做了 4 次。 学分如上次 post 至 Brad and this blog post with tutorial for php5 所述。我刚刚为 php7.0

修改了它