小编Bas*_*nWW的帖子

除了CURLOPT_COOKIEFILE之外,我如何使用PHP curl发送cookie?

表格提交后,我正在从网站上抓取一些内容.问题是脚本时不时地失败,比如说5个脚本失败了2次.我正在使用php curl,COOKIEFILE和COOKIEJAR来处理cookie.但是,当我观察我的浏览器发送的标题(从我的浏览器访问目标网站并使用实时http标头)和php发送的标题时,看到有很多不同之处.

我的浏览器发送了比php curl更多的cookie变量.我认为这种差异可能是因为javascript可用于设置大多数cookie,但我不确定这一点.

我正在使用下面的代码进行抓取,我正在显示我的浏览器和php curl的已发送标题:

$ckfile = tempnam ("/tmp", 'cookiename');

$url = 'https://www.domain.com/firststep';
$poststring = 'variable1=4&variable2=5';
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $poststring);
$output = curl_exec ($ch);
curl_close($ch);



$url = 'https://www.domain.com/nextstep';
$poststring = 'variableB1=4&variableB2=5';
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, …
Run Code Online (Sandbox Code Playgroud)

php cookies curl setcookie

38
推荐指数
2
解决办法
11万
查看次数

为什么PHP flush不能始终正常工作,第1/5次没有正确加载?

一个大的php脚本使用flush将生成的html的一部分发送到浏览器,同时执行脚本的大部分需要appr.20秒

刷新后执行的脚本部分非常大,从服务器预留(90%cpu)中占用很多.

一旦进入5次页面保持空白(白色),这意味着刷新没有到达发送显示页面正在加载的图像.当程序完成时,页面保持空白(浏览器指示它仍在加载)并且应该将整个页面发送到浏览器.

值得注意的是:当我按下后退按钮时,整个页面将显示(应该在整个脚本执行后应该在浏览器中加载)一秒钟,然后浏览器返回上一页.

所有其他4次页面加载良好.所有5次PHP脚本的输入都是相同的.

我在.htacces文件中有这些设置:

addhandler x-httpd-php5-cgi .php5 
addhandler x-httpd-php5-cgi .php5
addhandler x-httpd-php5-cgi .php5 
Header Set Cache-Control "max-age=0, no-store"
Run Code Online (Sandbox Code Playgroud)

这是将生成的代码刷新到浏览器的语句:

print str_pad('',4096)."\n";
ob_flush();
flush();
Run Code Online (Sandbox Code Playgroud)

什么可能导致这个问题?

php apache

5
推荐指数
1
解决办法
473
查看次数

为什么Mysql在连接另一个表B时对表A使用全表扫描?

我有一个表 A 和一个表 B。我正在从表 A 中选择信息,其中我只需要表 A 中的信息,其中表 B 联接表 A。我在联合列和 WHERE 子句上有索引。

这是选择代码:

SELECT *
FROM tableA

INNER JOIN tableB AS tableB
ON tableB.id = tableA.id
AND tableB.type = 'car'
Run Code Online (Sandbox Code Playgroud)

当我使用解释时,我可以看到 mysql 对表 A 中的所有行使用全表扫描。此外,它正确地使用索引来连接 tableB。

所以Mysql似乎正在做的是扫描talbeA中的所有行以查看是否与tableB匹配。然而,由于我在两个表的 id 上都有索引,所以我不希望进行表扫描。由于我的表有 50.000 行,此查询需要几秒钟的时间(这对于我的应用程序来说确实太长了)。

这是解释:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  tableA      ALL     tableA.id       NULL    NULL    49898   
1   SIMPLE  tableB      eq_ref  tableB.type     tableB.type 4   1       Use WHere
Run Code Online (Sandbox Code Playgroud)

我的问题:如何优化此查询和索引,以便 Mysql 直接从 tableA 中选择与 tableB 匹配的行,而不扫描 talbeA …

mysql join inner-join left-join

5
推荐指数
1
解决办法
6071
查看次数

php PDO插入不起作用,没有错误

我有这种代码的和平,应该将记录插入到mysql数据库中:

$sql = "INSERT INTO connections (column1, column2, column3, column4, column5, column6, column7) VALUES (?, ?, ?, ?, ?, ?, ?)')";
$stmt = $pdo->prepare($sql);
if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($pdo->errorInfo());
}
$stmt->execute(array('wer','wer','wer','2','wer','wer','wer'));
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误,并且记录未显示在表格中.怎么可能出错?

更新:

由于以下答案,这是完整的工作代码:

$sql = "INSERT INTO connections (column1, column2, column3, column4, column5, column6, column7) VALUES (?, ?, ?, ?, ?, ?, ?)";
$stmt = $pdo->prepare($sql);
if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($pdo->errorInfo());
}
$stmt->execute(array('wer','wer','wer','2','wer','wer','wer'));
Run Code Online (Sandbox Code Playgroud)

php pdo

4
推荐指数
1
解决办法
1万
查看次数

结合 BTREE 和地理/空间索引来加速我的查询?

我有一个包含 500,000 行的 mysql myisam 表。在这张表中,我有不同类型的地点和经纬度坐标的信息。根据用户的不同,我想在距离由纬度和经度定义的点一定距离内选择某种类型的地方。

我有一个空间索引和一个关于纬度、经度、类型的多列索引。如果某个区域内的行数不是太大,那么这些索引就可以很好地工作。

问题是在某些情况下,我需要从某个点(由纬度、经度坐标定义)使用非常大的半径,因为所需类型的地方很少。然而问题是,当我搜索某种类型时,比如“x”,mysql 会搜索大约 20,000 行,因为我的半径很大,比如“200 公里”。然而,在现实世界中,距离某个点 200 公里范围内只有 5 个类型为“x”的地方。

我在某处读到 BTREE 和 SPATIAL 索引不能组合。但是,我想寻求一种解决方案,在该解决方案中,我能够根据纬度、经度和类型的输入非常快速地选择这 5 个地点。

我尝试了以下两种方法:

方法 1 - 空间索引:

SELECT * FROM destinations 
WHERE MBRWithin(lat_lng_point, GeomFromText('Polygon((49.8413216059 12.8478000082, 48.0426783941 12.8478000082, 48.0426783941 15.5861999918, 49.8413216059 15.5861999918, 49.8413216059 12.8478000082))')) 
AND destinations.type = 'x'
Run Code Online (Sandbox Code Playgroud)

方法 2 - 纬度、经度的多列索引,类型:

SELECT * FROM destinations FORCE INDEX (lat_long_type_main)
WHERE latitude > 49.7786783941 AND latitude < 51.5773216059 
AND longitude > 10.0927907742 AND longitude < 12.9312092258 
AND type = 'x'
Run Code Online (Sandbox Code Playgroud)

方法 …

mysql indexing performance geospatial latitude-longitude

4
推荐指数
1
解决办法
1735
查看次数

从mysql数据库中选择多个colums的最快方法是什么?

我需要从数据库中选择25列,条件为WHERE和ORDER BY.

我尝试为此制作索引,但仅限于16列.我如何组织mysql语句和数据库,以便以最快的方式从PHP中的数据库中选择这25列?

示例表:

列:A,B,C,D,E,F,....

查询:"SELECT A,B,C,D,E,F,... FROM表WHERE X = 5 ORDER BY Z"

更新1:

这是一个大表(很多行),这就是为什么我需要一个索引来加速这个过程.

php mysql

1
推荐指数
1
解决办法
153
查看次数