Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Symfony2中加载php扩展-连接到SAP_Php_Symfony_Php Extension_Saprfc - Fatal编程技术网

在Symfony2中加载php扩展-连接到SAP

在Symfony2中加载php扩展-连接到SAP,php,symfony,php-extension,saprfc,Php,Symfony,Php Extension,Saprfc,作为这里的第一个问题,我将从一些困难的事情开始 我正在从事一个Symfony项目,该项目可以与SAP链接以提取数据并进行一些报告。我使用了piersharding的扩展,因为它是唯一可以用我的环境(Windowsx86和PHP5.6.8)编译的扩展之一 第一步的效果并不差: 将dll文件添加到php/ext 将行php-sapnwrfc-x86.dll添加到php.ini 它出现在phpinfo()上 使用以下代码使其在symfony(独立php脚本)之外的示例文件中工作: /test.ph

作为这里的第一个问题,我将从一些困难的事情开始

我正在从事一个Symfony项目,该项目可以与SAP链接以提取数据并进行一些报告。我使用了piersharding的扩展,因为它是唯一可以用我的环境(Windowsx86和PHP5.6.8)编译的扩展之一

第一步的效果并不差:

  • 将dll文件添加到php/ext
  • 将行php-sapnwrfc-x86.dll添加到php.ini
  • 它出现在phpinfo()上
  • 使用以下代码使其在symfony(独立php脚本)之外的示例文件中工作:
/test.php

 <? php
 require_once 'sap_config.php';
 require_once 'spyc.php';
 extension_loaded("sapnwrfc");
 global $SAP_CONFIG;
 class _
 {
     public function setUp() {
         global $SAP_CONFIG;
         $this->config = Spyc::YAMLLoad($SAP_CONFIG);
     }

     public function sapConnect() {
         try {
             $this->conn = new sapnwrfc($this->config);
         }
         ....
<?php

namespace SE\InputBundle\Extensions;

use SE\InputBundle\Extensions\SapConfig;
use SE\InputBundle\Extensions\Spyc;
use SE\InputBundle\Entity\SAPRF;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;

//the following doesn't seem to do much:
extension_loaded("sapnwrfc");

use sapnwrfc;
use sapnwrfcConnectionException;
use sapnwrfcCallException;

global $SAP_CONFIG;

class SapConnection
{
    public function setUp() {
        global $SAP_CONFIG;
        $this->config = Spyc::YAMLLoad($SAP_CONFIG);
        //the following displays "false"
        $alertpop = (class_exists("sapnwrfc")) ? "true" : "false";
        echo "<script type='text/javascript'>alert('$alertpop');</script>";
    }

    public function sapConnect() {
        try {
            // the error is triggered here
            $this->conn = new sapnwrfc($this->config);
        }
        catch (sapnwrfcConnectionException $e) {
            echo "Exception type: ".$e."<br />";
            echo "Exception key: ".$e->key."<br />";
            echo "Exception code: ".$e->code."<br />";
            echo "Exception message: ".$e->getMessage();
        }
        catch (Exception $e) {
            echo "Exception type: ".$e."\n";
            echo "Exception key: ".$e->key."\n";
            echo "Exception code: ".$e->code."\n";
            echo "Exception message: ".$e->getMessage();
            throw new Exception('Connection failed.');
        }    
    }

.....
尝试以下操作:

use \sapnwrfc;
use \sapnwrfcConnectionException;
use \sapnwrfcCallException;
您缺少
\
,这会导致php在当前名称空间中搜索这些类,即
扩展
。(代码中的第一行。)

此外,还需要对类/异常进行escpae

public function sapConnect() {
    try {
        // the error is triggered here
        $this->conn = new \sapnwrfc($this->config);
    }
    catch (\sapnwrfcConnectionException $e) {
        echo "Exception type: ".$e."<br />";
        echo "Exception key: ".$e->key."<br />";
        echo "Exception code: ".$e->code."<br />";
        echo "Exception message: ".$e->getMessage();
    }
    catch (\Exception $e) {
        echo "Exception type: ".$e."\n";
        echo "Exception key: ".$e->key."\n";
        echo "Exception code: ".$e->code."\n";
        echo "Exception message: ".$e->getMessage();
        throw new \Exception('Connection failed.');
    }    
}
公共函数sapConnect(){
试一试{
//错误在这里触发
$this->conn=new\sapnwrfc($this->config);
}
捕获(\SAPNWRFConnectionException$e){
回显“异常类型:.$e.”
”; 回显“异常键:.$e->key.
”; 回显“异常代码:”.$e->代码“
”; 回显“异常消息:”..e->getMessage(); } 捕获(\异常$e){ echo“异常类型:.$e.“\n”; 回显“异常键:.$e->key.\n”; 回显“异常代码:”..e->code.\n”; 回显“异常消息:”..e->getMessage(); 抛出新\异常('连接失败'); } }

希望有帮助。

欢迎使用SO。按照您编写本文的方式,PHP正在尝试在
扩展
名称空间中查找此扩展。您好,感谢@WebNomad的快速回答。不幸的是,这并不能解决问题。symfony引发的错误是相同的:函数在全局命名空间中无法识别。不过,我怀疑我们能否超越全局名称空间。小警报仍然显示“false”。感谢您在
设置
方法中打印
$SAP\u CONFIG
,查看是否具有正确的值。是的。它是一个具有以下键的数组:'ASHOST'=>'…','SYSNR'=>'00','CLIENT'=>'200','user'=>','passwd'=>','LANG'=>'en','TRACE'=>1','LOGLEVEL'=>'warn'