自去年以来,开发区块链业务的需求逐渐增长。以太坊作为主流平台之一,与 PHP 的集成成为许多开发者关注的焦点。本文将介绍如何使用 PHP 通过 JSON-RPC 调用与以太坊节点进行交互,涵盖环境搭建、节点配置及实际调用示例。
开发环境设置
推荐使用 Ubuntu 14.04 LTS 系统。安装完成后,先更新系统包:
sudo apt-get update
sudo apt-get upgrade随后设置 SSH、iptables 和 ntp 等基础服务。接着安装 Apache 和 PHP 5.5:
sudo apt-get install php5 libapache2-mod-php5 php5-curl以太坊节点搭建
本次使用 Go 语言编写的以太坊节点 go-ethereum(简称 geth)。首先添加以太坊官方存储库:
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev更新并安装 geth:
sudo apt-get update
sudo apt-get install ethereum启动私有网络
创建数据目录并定义创世区块配置:
mkdir ~/eth_private_net
vim ~/eth_private_net/my_genesis.json在 my_genesis.json 文件中写入以下内容:
{
"nonce": "0x0000000000000042",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0",
"gasLimit": "0xffffffff",
"difficulty": "0x4000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}初始化创世区块并启动节点:
geth --datadir "/home/yoshida/eth_private_net" init /home/yoshida/eth_private_net/my_genesis.json
geth --networkid 57598955 --port 8955 --nodiscover --datadir "/home/yoshida/eth_private_net" console 2>> /home/yoshida/eth_private_net/geth_err.log常用启动参数说明:
networkid:网络标识符,用于连接公共节点port:节点监听端口,建议使用 4 位数字nodiscover:禁用节点自动发现datadir:区块链数据存储目录console:启动同时进入控制台模式
配置 JSON-RPC 接口
创建以太坊账户
在 geth 控制台中执行以下命令:
eth.accounts
personal.newAccount("password")
eth.accounts
miner.setEtherbase(eth.accounts[0])第一个命令显示现有账户(初始为空数组),第二个命令创建新账户并返回地址,第三个命令再次查看账户列表,第四个命令设置挖矿奖励地址。
启用 RPC 接口
退出控制台后重新启动 geth,添加 RPC 相关参数:
geth --networkid 57598955 --port 8955 --nodiscover --rpc --rpcaddr "0.0.0.0" --rpcport "8956" --rpccorsdomain "*" --rpcapi "eth,net,web3,personal" --datadir "/home/yoshida/eth_private_net" console 2>> /home/yoshida/eth_private_net/geth_err.log新增参数说明:
rpc:启用 RPC 服务器rpcaddr:RPC 服务监听 IPrpcport:RPC 服务端口号rpccorsdomain:允许访问的域名("*" 表示允许所有)rpcapi:允许调用的 API 模块
PHP 调用实践
推荐使用开源库 ethereum-php 简化开发。将类文件下载到项目目录后,即可进行调用:
<?php
require_once 'ethereum.php';
$eth = new Ethereum('localhost', '8956');
print_r($eth->eth_accounts());
?>运行脚本将返回已创建的账户列表:
php test.php
Array
(
[0] => 0xb83fa0d1c6b34a42f900cca5a32400c3b6f69f4b
)若连接失败,请检查端口设置和防火墙配置。👉 查看实时交互工具 获取更多开发支持。
常见问题
如何选择以太坊客户端?
除了 geth,还有 Parity、Hyperledger Besu 等客户端可选。geth 是最常用的官方客户端,适合大多数场景。
PHP 库是否支持其他区块链?
ethereum-php 专为以太坊设计,但其他兼容 EVM 的区块链(如 BSC、Polygon)也可通过调整节点配置使用。
遇到连接拒绝怎么办?
检查节点 RPC 端口是否开放、防火墙设置是否正确,以及是否使用了正确的网络 ID 和端口号。
如何提高交互安全性?
建议使用内网环境部署节点,限制 RPC 访问 IP,并为敏感操作添加身份验证机制。
智能合约交互是否复杂?
基础调用与账户操作类似,但合约开发需要掌握 Solidity 语言和 ABI 编码等知识。
除了 JSON-RPC 还有哪些交互方式?
还可使用 Web3.js 库前端集成,或通过 Infura 等节点服务商提供的 API 进行交互。
通过本文介绍的方法,开发者可以快速建立 PHP 与以太坊的交互通道,为区块链应用开发奠定基础。随着技术发展,更多高效的工具和库不断涌现,持续学习将帮助您保持竞争力。