php开启sockets模块,在给php添加sockets.so模块的时候报错

[root@sky ~]# service nginxd restart

Stopping nginx:                                            [  OK  ]

Shutting down php_fpm . done

Starting nginx:                                            [  OK  ]

Starting php_fpm PHP Warning:  PHP Startup: Unable to load dynamic library '/www/wdlinux/wdphp/lib/php/extensions/no-debug-non-zts-20060613/sockets.so' - /www/wdlinux/wdphp/lib/php/extensions/no-debug-non-zts-20060613/sockets.so: cannot open shared object file: No such file or directory in Unknown on line 0

done

我是这样添加的:

1、进入php源文件下ext/sockets目录

cd /usr/src/lanmp/lanmp/php-5.2.17/ext/sockets/

2、执行命令

[root@sky sockets]# /www/wdlinux/php/bin/phpize

Configuring for:

PHP Api Version:         20041225

Zend Module Api No:      20060613

Zend Extension Api No:   220060519

3、编译安装

[root@sky sockets]# ./configure --enable-sockets --with-php-config=/www/wdlinux/php/bin/php-config

checking for grep that handles long lines and -e... /bin/grep

checking for egrep... /bin/grep -E

checking for a sed that does not truncate output... /bin/sed

checking for cc... cc

checking for C compiler default output file name... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables...

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether cc accepts -g... yes

checking for cc option to accept ISO C89... none needed

checking how to run the C preprocessor... cc -E

checking for icc... no

checking for suncc... no

checking whether cc understands -c and -o together... yes

checking for system library directory... lib

checking if compiler supports -R... no

checking if compiler supports -Wl,-rpath,... yes

checking build system type... x86_64-unknown-linux-gnu

checking host system type... x86_64-unknown-linux-gnu

checking target system type... x86_64-unknown-linux-gnu

checking for PHP prefix... /www/wdlinux/php

checking for PHP includes... -I/www/wdlinux/php/include/php -I/www/wdlinux/php/include/php/main -I/www/wdlinux/php/include/php/TSRM -I/www/wdlinux/php/include/php/Zend -I/www/wdlinux/php/include/php/ext -I/www/wdlinux/php/include/php/ext/date/lib

checking for PHP extension directory... /www/wdlinux/php/lib/php/extensions/no-debug-non-zts-20060613

checking for PHP installed headers prefix... /www/wdlinux/php/include/php

checking if debug is enabled... no

checking if zts is enabled... no

checking for re2c... no

configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

checking for gawk... gawk

checking whether to enable sockets support... yes, shared

checking for struct cmsghdr... yes

checking for hstrerror... yes

checking for socketpair... yes

checking for ANSI C header files... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking netdb.h usability... yes

checking netdb.h presence... yes

checking for netdb.h... yes

checking netinet/tcp.h usability... yes

checking netinet/tcp.h presence... yes

checking for netinet/tcp.h... yes

checking sys/un.h usability... yes

checking sys/un.h presence... yes

checking for sys/un.h... yes

checking errno.h usability... yes

checking errno.h presence... yes

checking for errno.h... yes

checking for ld used by cc... /usr/bin/ld

checking if the linker (/usr/bin/ld) is GNU ld... yes

checking for /usr/bin/ld option to reload object files... -r

checking for BSD-compatible nm... /usr/bin/nm -B

checking whether ln -s works... yes

checking how to recognize dependent libraries... pass_all

./configure: line 5967: /usr/bin/file: No such file or directory

checking dlfcn.h usability... yes

checking dlfcn.h presence... yes

checking for dlfcn.h... yes

checking the maximum length of command line arguments... 1966080

checking command to parse /usr/bin/nm -B output from cc object... ok

checking for objdir... .libs

checking for ar... ar

checking for ranlib... ranlib

checking for strip... strip

checking if cc supports -fno-rtti -fno-exceptions... no

checking for cc option to produce PIC... -fPIC

checking if cc PIC flag -fPIC works... yes

checking if cc static flag -static works... no

checking if cc supports -c -o file.o... yes

checking whether the cc linker (/usr/bin/ld) supports shared libraries... yes

checking whether -lc should be explicitly linked in... no

checking dynamic linker characteristics... GNU/Linux ld.so

checking how to hardcode library paths into programs... immediate

checking whether stripping libraries is possible... yes

checking if libtool supports shared libraries... yes

checking whether to build shared libraries... yes

checking whether to build static libraries... no

creating libtool

appending configuration tag "CXX" to libtool

configure: creating ./config.status

config.status: creating config.h

config.status: config.h is unchanged

### 关于 PHP Sockets 的实现与教程 PHP 提供了一组函数用于创建和管理网络套接字(Sockets),这些功能可以用来开发客户端或服务器端应用程序。以下是关于 PHP 套接字的一些核心概念以及其实现方式。 #### 创建一个简单的 TCP/IP Socket Server 下面是一个基于 PHP 的简单 TCP/IP 服务器示例: ```php <?php // 定义主机地址和端口号 $address = '127.0.0.1'; $port = 8080; // 创建一个 AF_INET 类型的流式套接字 if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo "Failed to create socket: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "Socket created.\n"; } // 绑定套接字到指定地址和端口 if (socket_bind($sock, $address, $port) === false) { echo "Failed to bind socket: " . socket_strerror(socket_last_error($sock)) . "\n"; } else { echo "Socket bound to address and port.\n"; } // 开始监听连接请求 if (socket_listen($sock, 5) === false) { echo "Failed to listen on socket: " . socket_strerror(socket_last_error($sock)) . "\n"; } else { echo "Listening for incoming connections...\n"; } do { // 接受一个新的客户端连接 if (($msgsock = socket_accept($sock)) === false) { echo "Failed to accept incoming connection: " . socket_strerror(socket_last_error($sock)) . "\n"; break; } else { echo "Client connected.\n"; // 向客户端发送欢迎消息 $message = "Welcome to the PHP Socket Server!\r\n"; socket_write($msgsock, $message, strlen($message)); do { // 读取来自客户端的消息 if (false === ($buf = socket_read($msgsock, 2048))) { echo "Failed to read from client: " . socket_strerror(socket_last_error($msgsock)) . "\n"; break 2; } if (!$buf = trim($buf)) { continue; } // 将收到的消息回显给客户端 $talkback = "You said '$buf'. Thank you for using our service.\r\n"; socket_write($msgsock, $talkback, strlen($talkback)); echo "$buf\n"; } while (true); // 关闭客户端连接 socket_close($msgsock); } } while (true); // 关闭主套接字 socket_close($sock); ?> ``` 此代码展示了如何通过 `socket_create` 函数创建一个套接字,并绑定到特定 IP 地址和端口上[^6]。随后,程序会进入循环等待客户端连接,并处理传入的数据。 --- #### 使用 Ratchet 实现 WebSocket 服务 如果需要更高级的功能,比如实时通信,则可以考虑使用 [Ratchet](https://github.com/ratchetphp/Ratchet),这是一个流行的 PHP 库,支持 WebSockets 协议。以下是从引用中提取的一个例子[^3]: ```php namespace LiveScores; use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; class Scores implements MessageComponentInterface { protected $clients; public function __construct() { $this->clients = new \SplObjectStorage(); } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection! ({$conn->resourceId})\n"; } public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($from !== $client) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Connection {$conn->resourceId} has disconnected\n"; } public function onError(ConnectionInterface $conn, \Exception $e) { echo "An error occurred: {$e->getMessage()}\n"; $conn->close(); } } ``` 这段代码定义了一个简单的消息代理类,允许多个客户端之间互相传递消息。 --- #### 解决常见问题 当尝试配置 PHP 或编写 Sockets 脚本时可能会遇到一些错误。例如,在安装旧版本 PHP 时需要注意依赖项兼容性问题[^1]。另外,确保启用了必要的扩展模块,如 `sockets` 扩展。可以通过命令行工具检查当前环境是否已加载该模块: ```bash php -m | grep sockets ``` 如果没有找到输出结果,则需编辑 `php.ini` 文件并将下列行取消注释: ```ini extension=sockets ``` 最后重启 Web 服务器使更改生效。 --- #### HTTPS 请求实例 对于涉及安全传输层协议的应用场景,可参考如下 Java 片段展示如何发起 HTTPS GET 请求[^5]: ```java URL url = new URL("https://www.example.com/"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); try(InputStream inputStream = conn.getInputStream()){ byte[] buffer = new byte[1024]; int bytesRead; StringBuilder responseBody = new StringBuilder(); while((bytesRead=inputStream.read(buffer)) != -1){ responseBody.append(new String(buffer, 0 , bytesRead )); } System.out.println(responseBody.toString()); }catch(IOException e){ e.printStackTrace(); } finally{ conn.disconnect(); } ``` 尽管这是针对另一种编程语言的例子,但它同样适用于理解 SSL/TLS 加密机制下的数据交换过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值