您现在的位置是:首页 > 科技资讯科技资讯

curl_exec(curl怎么强制关闭)

编辑 2024-06-04 12:40:46 科技资讯

1. curl_exec,curl怎么强制关闭?

(PHP 4 >= 4.0.2, PHP 5)

curl_close — 关闭一个cURL会话

说明

void curl_close ( resource $ch )

关闭一个cURL会话并且释放所有资源。cURL句柄ch 也会被释放。

参数

ch由 curl_init() 返回的 cURL 句柄。

返回值

没有返回值。

范例

Example #1 初始化一个cURL会话来获取一个网页

<?php

// 创建一个新cURL资源

$ch = curl_init();

// 设置URL和相应的选项

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");

curl_setopt($ch, CURLOPT_HEADER, 0);

// 抓取URL并把它传递给浏览器

curl_exec($ch);

// 关闭cURL资源,并且释放系统资源

curl_close($ch);

?>

curl_exec(curl怎么强制关闭)

2. PHP实现上传图片到zimg服务器?

最近我们项目需要一台图片服务器存储用户头像,我们使用zimg处理和存储图片,下面简单介绍一下如何使用PHP上传图片到zimg,并获取相应图片的返回信息使用curl库实现上传根据zimg使用文档,我们想要让zimg返回json信息,就必须raw_post上传图片,下面是演示代码$upload_url='http://192.168.0.99:5000/upload';$image_file='./test.jpg'

;//获取图片后缀$value=explode(".",$image_file);$extension=strtolower(array_pop($value))

;//生成本地临时存储路径,并生成相应文件夹$dir='aurthur';$save_path='uploads/'.$dir.'/'.date('Y').'/'.date('md').'/';$save_rule=md5(uniqid(mt_rand(),true))

;if(!is_dir($save_path)){if(false===mkdir($save_path,0700,true)){exit('创建文件夹失败');}}$save_image_file=$save_path.$save_rule.".$extension"

;//把图片存储到临时路径file_put_contents($save_image_file,file_get_contents($image_file))

;//获取临时保存的图片的真实地址(绝对路径)$realpath=realpath($save_image_file)

;//上传图片到zimg图片存储服务$ch=curl_init()

;//将图片内容读取到变量$post_data;$post_data=file_get_contents($realpath);$headers=array()

;//一定要添加此header$headers[]='Content-Type:'.$extension;curl_setopt($ch,CURLOPT_URL,$upload_url)

;curl_setopt($ch,CURLOPT_HEADER,false)

;curl_setopt($ch,CURLOPT_HTTPHEADER,$headers)

;curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_POST,true)

;curl_setopt($ch,CURLOPT_BINARYTRANSFER,true)

;curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data)

;//raw_post方式$info=curl_exec($ch);curl_close($ch);$json=json_decode($info,true);$signature=$json['info']['md5'];echo$signature;如果想测试代码的话,请把上面的uploadurl改成你自己的zimg服务器地址,并把image_file改成你需要上传的图片的路径

3. 为何多数git教程里添加远程库默认推荐ssh?

4种git支持的协议中,ssh 配置简单,权限管理也比较全面,无需密码,且linux 内置,当然会有偏向平台的。git协议是运行最快的,基本上和操作系统关系不大,就是git-daemon 启动,然后git-clone。对那些人来说,快是很重要的。

至于 smart http 很慢,并且,配置真的(相对)复杂,需要了解cgi的概念,环境变量概念,特定的web server的配置方法,以及特定操作系统的配置方法。我看到的pro git中的smart http配置,就是缺少一些步骤的。

我刚刚写了文章,对比了下,ssh,git配置大概半页,http3页而且只能适应于osx,apache的组合。可以欣赏下:

==========正文

## 更多协议

想要和他人协作,我必须有远程仓库,这样我才可以推送和拉取代码的变更。在上一节,我们已经通过一个共享仓库作为中介,以本地协议的通讯方式,达成两人(多人)的代码协作了。

git支持4种协议,包括本地协议、HTTP协议、Git协议、SSH协议。我们继续看看Git协议。

## Git 协议

通过Git协议来托管仓库是内置于git-daemon命令之内。因此使用它来做测试和验证仓库的托管是非常方便的。执行 git-daemon,会启动一个监守程序,等待采用git协议来连接的客户端,这些连接过来的客户端可以访问指定目录下的仓库。

假设我们在~/git目录内已经存在一个共享仓库,那么

cd ~/git

git daemon --verbose --export-all --base-path=. --enable=receive-pack

这里的新命令git-daemon需要做些解释。参数说明:

--base-path=. 指定基础目录,客户端连接指定的目录都相对于此目录来定位目录。当前命令行内的基础目录就是 ~/git

--enable=receive-

--export-all 公开全部仓库

启动了git监守程序,就可以在客户端运行git-clone来拉取仓库了:

git clone git://localhost/repo.git

我们使用的主机地址为localhost,就是意味着拉取的仓库位于本机;你可以使用IP地址,就可以访问其他主机的托管仓库了。

## SSH 协议

以 OS X 为例,首先激活sshd:

sudo systemsetup -setremotelogin on

随后远程登录到主机(为了演示和测试的方便,远程主机使用localhost来做模拟),并输入密码:

ssh localhhost

然后创建一个共享仓库:

mkdir gitshared.git

cd gitshared.git

git init --bare --shared

exit

这时我们已经准备好了一个空仓库,可以在另外一个主机(也是本机)做克隆了。

git clone ssh://localhost/Users/lcjun/gitshared.git

使用git-remote来查询远程仓库:

$git remote -v

origin ssh://localhost/Users/lcjun/gitshared (fetch)

origin ssh://localhost/Users/lcjun/gitshared (push)

即可验证命令确实有效的被执行了,ssh远程仓库也已经和本地关联起来了。

## HTTP

HTTP 协议下的git托管是相对最复杂的,因为它涉及到了Web Server的配置,CGI知识,特定的OS。WebServer和操作系统的版本差异也会对应有不同的配置方法。我的操作系统是OS X EI Captain,Git 版本为2.6,Apache 版本为2.4 。我以本机为服务器,本机地址为192.168.3.11 。在这样的环境下,我希望可以使用

git clone http://git.example.com/repo.git

的形式,以http协议方法访问主机上的repo.git 仓库。留意URL的第一部分是http,而不是ssh,或者git。

假设仓库以 /var/www/git 存放。我在此目录内创建一个名为 repo.git 的仓库:

mkdir -p /var/www/git/repo.git

cd /var/www/git/repo.git

git init --bare --shared

在本机内,找到 hosts 文件,并加入如下一行,以便支持通过主机名(http://git.example.com)访问主机

192.168.3.11 http://git.example.com

我采用apache作为Web 服务器,首先保证apache是启动和可以访问的:

$ sudo apachectl start

$ curl localhost

<html><body><h1>It works!</h1></body></html>

¥ curl http://git.example.com

<html><body><h1>It works!</h1></body></html>

git-http-backend 需要引用模块 cgi,env,alias。必须它们是被加载了的。具体的做法是查看 http.conf ,确保一下模样的行是没有被标注的。如果被标注(行首有一个#),那么通过去掉“#”来解除标注。我的主机上,http.conf的位置在 /etc/apache2/httpd.conf 。

LoadModule cgi_module libexec/apache2/mod_cgi.so

LoadModule env_module libexec/apache2/mod_env.so

LoadModule alias_module libexec/apache2/mod_alias.so

找到http.conf ,加入如下配置在文件末尾,它添加了一个名为http://git.example.com的虚拟主机,它的文档目录为/var/www/git:

<VirtualHost 192.168.3.11:80>

DocumentRoot /var/www/git

ServerName http://git.example.com

<Directory "/var/www/git">

Options +Indexes

Require all granted

</Directory>

<Directory "/usr/local/Cellar/git/2.4.1/libexec/git-core/">

Options ExecCGI Indexes

Order allow,deny

Allow from all

Require all granted

</Directory>

SetEnv GIT_HTTP_EXPORT_ALL

SetEnv GIT_PROJECT_ROOT /var/www/git

ScriptAlias /git/ /usr/local/Cellar/git/2.4.1/libexec/git-core/git-http-backend/

</VirtualHost>

同时,这段配置内还添加了一个脚本别名,别名指向git-http-backend的CGI程序。git-http-backend 在不同的系统上可能位置不同,可以使用这个命令查找到它:

$ find / -name git-http-backend 2>/dev/null

为了让此CGI 可以运行,也必须配套的把CGI所在目录设置为允许执行CGI(Options ExecCGI)。

GIT_PROJECT_ROOT 必须设置,这个值是 git-http-backend 需要的,有了它,git-http-backend 就知道如何定位基础目录了。环境变量 GIT_HTTP_EXPORT_ALL 看起来有点熟悉,是因为我们在上一节git 协议内在git守护进程的命令行中看到过它。设置了此环境变量,就意味着在基础目录内的所有仓库都是可以对外共享的。

进入需要克隆的git仓库所在的目录并执行git update-server-info:

cd /var/www/git/repo.git

sudo git update-server-info

重启apache

sudo apachectl restart

随后,我就可以真的去克隆一个在apache服务后的git仓库了:

git clone http://git.example.com/repo.git

Cloning into 'repo'...

warning: You appear to have cloned an empty repository.

Checking connectivity... done.

这个配置过程相对复杂,难免配置是出现不期望的错误,那么常备些命令是可以帮助调试的。比如查看Apache 运行错误

sudo tail /private/var/log/apache2/error_log

我需要多次修改http.conf ,记得使用:

apachectl configtest

验证下配置是正确的。我发现这个命令对我是有用的。

#找到apache 用户的方法

$ ps aux | egrep '(apache|httpd)'.

#找到apache用户组的方法:

$ id user-name

user-name 换成apache 用户名

在我的主机上,我在升级git的时候,曾经出过这样的报错:

$brew upgrade git

# Git package broken in 10.11 El Capitan

brew reinstall git

...

==> make prefix=/usr/local/Cellar/git/2.4.3 sysconfdir=/usr/local/etc CC=clang C

./git-compat-util.h:219:10: fatal error: 'openssl/ssl.h' file not found

#include <openssl/ssl.h>

^

我尝试了改变下命令行参数的方式:

brew reinstall git --with-brewed-openssl

结果是可以升级到最新的git版本的(git 2.6.4)

4. atomx如何更新?

Atomx是一个基于Docker的容器化平台,可以通过Docker容器进行更新。以下是更新Atomx的步骤:

1. 停止Atomx容器:在终端中运行以下命令停止Atomx容器:

```

docker stop <container_id>

```

2. 更新Atomx:在停止容器后,进入容器的根目录,运行以下命令更新Atomx:

```

docker exec <container_id> apt-get update && apt-get install -y build-essential libgtk2.0-dev pkg-config libasound2-dev libcurl4-openssl-dev libcurl4-dev libcurl4-openssl-dev libgstreamer1.0-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-base1.0-dev

```

如果您使用的是其他Linux发行版,可能需要相应地替换`<container_id>`和`<container_id>`中的值。

3. 安装必要的软件包:在更新Atomx之前,您可能需要先安装一些必要的软件包。例如,如果您需要使用Python,请运行以下命令安装Python:

```

sudo apt-get install python3-pip

```

4. 安装其他软件包:如果您需要安装其他软件包,可以运行以下命令:

```

sudo apt-get install <软件包名>

```

例如,如果要安装OpenCV,可以运行以下命令:

```

sudo apt-get install cv2

```

注意,您需要确保您在更新Atomx之前已经备份了要更新的软件包列表。

5. 启动Atomx容器:在完成更新和软件包安装后,您可以重新启动Atomx容器。在终端中运行以下命令启动容器:

```

docker start <container_id>

```

您可以使用以下命令查看容器状态:

```

docker ps

```

其中,`<container_id>`是更新后的Atomx容器ID。

本文标签:

很赞哦! ()

横幅广告