新版本的Curl无法获取

#1 学海无涯


老师好:

昨天发现一个问题,搜索了一下没有找到更好的答案。所以发帖来求助。

问题出现:

在控制器内正常使用Curl 传输到 第三方PHP文件内没问题。代码如下:

第三方PHP文件只得是,并没有继承SP框架,单独写的。但是在同一个站点下。

如:http://localhost/api/ceshi.php

以下代码,写在 SP控制器内。使用Curl 请求Ceshi.php 完全可以执行。
$aliredata = array( 
    'name'=>$name,   
);

/**
* CURL 提交过程
*/

$uri = "http://localhost/api/ceshi.php";
$ch = curl_init ();  //初始化CUL
curl_setopt ( $ch, CURLOPT_URL, $uri );  //抓取网址
curl_setopt ( $ch, CURLOPT_POST, 1 ); //使用POST方式提交
curl_setopt ( $ch, CURLOPT_HEADER, 0 ); //设置header
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); //要求结果为字符串输出到屏幕上
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $aliredata );  //提交数据
$return = curl_exec ( $ch );  //运行
curl_close ( $ch );
echo $return;


出现问题:第三方、或者本控制器内 向框架提交Curl 无法执行。
问题一:所有都是框架内进行Curl控制器 :http://localhost/protected/controller/UserController.phpaction :update
代码如下:
$aliredata = array( 
    'name'=>$name,   
);

/**
* CURL 提交过程
*/

$uri = "http://localhost/column/add";
$ch = curl_init ();  //初始化CUL
curl_setopt ( $ch, CURLOPT_URL, $uri );  //抓取网址
curl_setopt ( $ch, CURLOPT_POST, 1 ); //使用POST方式提交
curl_setopt ( $ch, CURLOPT_HEADER, 0 ); //设置header
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); //要求结果为字符串输出到屏幕上
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $aliredata );  //提交数据
$return = curl_exec ( $ch );  //运行
curl_close ( $ch );
echo $return;

控制器 :http://localhost/protected/controller/ColumnController.phpaction :add
代码如下:
$name = arg("name"); // 使用$_POST['name']依然没有收到值
echo $name;

执行结果:直接跳转到首页(PS 不涉及伪静态的问题哦)

问题二:外部PHP 向框架内CURL数据 无法执行
Curl提交地址:http://localhost/api/tijiao.php
代码如下:
$aliredata = array( 
    'name'=>$name,   
);

/**
* CURL 提交过程
*/

$uri = "http://localhost/column/add";
$ch = curl_init ();  //初始化CUL
curl_setopt ( $ch, CURLOPT_URL, $uri );  //抓取网址
curl_setopt ( $ch, CURLOPT_POST, 1 ); //使用POST方式提交
curl_setopt ( $ch, CURLOPT_HEADER, 0 ); //设置header
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); //要求结果为字符串输出到屏幕上
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $aliredata );  //提交数据
$return = curl_exec ( $ch );  //运行
curl_close ( $ch );
echo $return;

控制器 :http://localhost/protected/controller/ColumnController.phpaction :add
代码如下:
$name = arg("name"); // 使用$_POST['name']依然没有收到值
echo $name;


执行结果:直接跳转到首页(PS 不涉及伪静态的问题哦)
谢谢老师,帮忙看下。是哪里出了问题。向外curl提交没有问题,向内(向框架内)提交有错误。

2017-12-30 23:43:41

#2 jake

你这里用的地址就是伪静态的,然后又说个什么“不涉及伪静态的问题哦”,要怎么说。

简单来说,开启伪静态就行。跳转到首页的效果都是因为没有配置好伪静态,请参考手册。
不用写一堆来证明什么,伪静态后的框架程序,和直接用php文件的效果是一样的,当然前提是伪静态设置正确了。

很多人一直喜欢对比什么框架内框架外效果,只能说表现了不懂伪静态的问题而已。

2017-12-31 17:21:24

#3 学海无涯

谢谢老师,确实伪静态的问题。
因为我去掉了的配置,
全部改为明确配置(column/add.html => columnb/add),而忘记增加Curl提交地址的明确规则。

下次一定认证检查。:)

2018-01-02 11:15:21

#4 学海无涯

谢谢老师,确实伪静态的问题。
因为我去掉了
的配置,
全部改为明确配置(column/add.html => columnb/add),而忘记增加Curl提交地址的明确规则。

下次一定认真检查。:)

2018-01-02 11:16:22