我已经试过了,老报错 $fifo_write=fopen("/tmp/cnm_fifo","w"); $real_wnum=fwrite("/tmp/cnm_fifo",$arr,strlen($arr)); if(real_wnum==-1) { if(errno==EAGAIN) printf("write to cnm_fifo error; try it later\n"); } else printf("real write num is %d\n",real_wnum);报如下的结果: Warning: fopen(/tmp/cnm_fifo) [function.fopen]: failed to open stream: Permission denied in /usr/local/php_bed/ZYCNM_DEPLOY_BED/apache/htdocs/webpage/login.php on line 48Warning: fwrite(): supplied argument is not a valid stream resource in /usr/local/php_bed/ZYCNM_DEPLOY_BED/apache/htdocs/webpage/login.php on line 49 real write num is 0
启动web服务的用户对那个文件没有写权限
chmod o+rw /tmp/cnm_fifo 试试看
可是在c语言里 fifo_write=open(cnm_fifo,O_WRONLY|O_NONBLOCK,0); real_wnum=write(fifo_write,w_buf,strlen(w_buf)); if(real_wnum==-1) { if(errno==EAGAIN) printf("write to fifo error; try later\n"); } else printf("real write num is %d\n",real_wnum);就可以对它进行读写,是相同的文件,为什么呢? 我该怎么用php实现这些呢?包括创建一个这样的文件(c语言中用mkfifo(FIFO_SERVER1, CNM_FIFO_MODE)就可以实现)?
$real_wnum=fwrite("/tmp/cnm_fifo",$arr,strlen($arr));
if(real_wnum==-1)
{
if(errno==EAGAIN)
printf("write to cnm_fifo error; try it later\n");
}
else
printf("real write num is %d\n",real_wnum);报如下的结果:
Warning: fopen(/tmp/cnm_fifo) [function.fopen]: failed to open stream: Permission denied in /usr/local/php_bed/ZYCNM_DEPLOY_BED/apache/htdocs/webpage/login.php on line 48Warning: fwrite(): supplied argument is not a valid stream resource in /usr/local/php_bed/ZYCNM_DEPLOY_BED/apache/htdocs/webpage/login.php on line 49
real write num is 0
fifo_write=open(cnm_fifo,O_WRONLY|O_NONBLOCK,0);
real_wnum=write(fifo_write,w_buf,strlen(w_buf));
if(real_wnum==-1)
{
if(errno==EAGAIN)
printf("write to fifo error; try later\n");
}
else
printf("real write num is %d\n",real_wnum);就可以对它进行读写,是相同的文件,为什么呢?
我该怎么用php实现这些呢?包括创建一个这样的文件(c语言中用mkfifo(FIFO_SERVER1, CNM_FIFO_MODE)就可以实现)?
将/tmp目录属性改下,改为apache的。
打开终端。键入命令
chown -R apache.apache /tmp
chmod -R 775 /tmp
$fifo_write=fopen("tmp/cnm_fifo","w"); //文件的名确保没有后缀吗?文件路径是否正确?
if(!fwrite($fifo_write,$arr))
{
print("write to cnm_fifo error; try it later\n");
}
else
print("real write num is ".strlen($arr));