如何从Bash脚本向PHP进程传递.txt文件?
别慌!我整理了几个从Bash脚本给PHP进程传递.txt文件的实用方案,都是平时开发里常用的,你可以按需尝试:
方法1:通过命令行参数传递文件路径
这是最直接的方式——Bash把文件路径传给PHP脚本,让PHP自己去读取文件内容。
Bash脚本示例
#!/bin/bash # 这里替换成你的txt文件路径(绝对路径更稳妥,避免路径问题) TXT_FILE="/home/user/data.txt" # 调用PHP脚本并传入文件路径作为参数 php /path/to/your/php_script.php "$TXT_FILE"
PHP脚本示例
<?php // $argc是参数个数,$argv是参数数组($argv[0]是脚本自身路径) if ($argc < 2) { die("错误:请传入txt文件路径作为参数\n"); } $filePath = $argv[1]; if (!file_exists($filePath)) { die("错误:文件不存在 -> $filePath\n"); } // 读取文件内容,大文件建议换成fopen/fgets逐行处理 $content = file_get_contents($filePath); echo "成功读取文件内容:\n$content"; ?>
方法2:通过标准输入(stdin)传递文件内容
如果不想传递路径,直接把文件内容通过管道/重定向传给PHP的标准输入,适合不需要保留文件的场景。
Bash脚本示例(两种写法都可以)
#!/bin/bash # 写法1:用重定向直接传入文件内容 php /path/to/your/php_script.php < /home/user/data.txt # 写法2:用cat命令配合管道传递 cat /home/user/data.txt | php /path/to/your/php_script.php
PHP脚本示例
<?php // 从标准输入读取全部内容,大文件建议用fgets逐行读取 $content = file_get_contents('php://stdin'); if (empty(trim($content))) { die("错误:没有收到输入内容\n"); } echo "通过标准输入收到的内容:\n$content"; ?>
方法3:用命名管道(FIFO)传递给常驻PHP进程
如果你的PHP是常驻进程(比如守护进程),可以用命名管道实现双向通信,适合持续传递内容的场景。
Bash脚本示例
#!/bin/bash # 创建命名管道(如果不存在) FIFO_PIPE="/tmp/my_pipe" if [ ! -p "$FIFO_PIPE" ]; then mkfifo "$FIFO_PIPE" fi # 后台启动监听管道的PHP进程 php /path/to/your/listener.php & # 把txt文件内容写入管道 cat /home/user/data.txt > "$FIFO_PIPE" # 用完后删除管道(可选,根据需求保留) rm "$FIFO_PIPE"
PHP监听脚本示例
<?php $pipePath = "/tmp/my_pipe"; $pipe = fopen($pipePath, 'r'); if (!$pipe) { die("错误:无法打开命名管道\n"); } // 逐行读取管道内容,适合大文件或持续输入 while (!feof($pipe)) { $line = fgets($pipe); if ($line !== false) { echo "收到管道内容:$line"; } } fclose($pipe); ?>
注意事项
- 确保PHP进程有读取目标.txt文件的权限(可以用
chmod调整文件权限,或者谨慎使用sudo执行脚本) - 如果是Web环境的PHP(比如Apache/Nginx运行的),和CLI模式的PHP是不同进程,要注意环境变量和权限差异
- 大文件建议用逐行读取(
fgets),避免一次性读取占用过多内存
内容的提问来源于stack exchange,提问作者oyeesh
相关产品推荐
相关产品推荐

