gpt4 book ai didi

PHP 和 Linux IPC 套接字(和 Dropbox)

转载 作者:行者123 更新时间:2023-12-03 11:56:14 27 4
gpt4 key购买 nike

我需要在 linux 上获取 Dropbox 的状态。

这是通过使用 unix 套接字文件作为 IPC 与 Dropbox 交互来完成的。

目前,一个 Python script存在这样做。

到目前为止,我已经得到了这段代码:

echo 'usr='. get_current_user().'<br/>';

$address='/root/.dropbox/iface_socket';
$socket=socket_create(AF_UNIX,SOCK_STREAM,0);
if(!socket_connect($socket,$address))
die('socket_connect '.socket_last_error().': '.socket_strerror(socket_last_error()));

上面的工作是因为它确实知道我想要做什么,但它失败了这个错误/输出:

usr=root

socket_bind 13: Permission denied



有趣的是,PHP 和 Dropboxd 都在同一个用户下运行。

注意:我尝试使用 PHP 的 fsockopen,但失败了(与“坏协议(protocol)”有关)。再试一次,这一次它可以工作......直到我在下面得到同样的错误......

编辑:再说一次,我知道以 root 身份运行是不好的,别管它,好吗? :)

编辑 2:正如我之前所说,PHP、Apache、Dropbox 和这个套接字文件都在用户“root”下,组“root”。
但是,如果我在 stat 下运行套接字,我会得到以下信息:
[root@cov .dropbox]# stat iface_socket
File: `iface_socket'
Size: 0 Blocks: 0 IO Block: 4096 socket
Device: 7dh/125d Inode: 255754311 Links: 1
Access: (0600/srw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-03-06 17:10:08.000000000 -0600
Modify: 2011-03-06 17:10:08.000000000 -0600
Change: 2011-03-06 17:10:08.000000000 -0600

难道所有这些 -0600是什么导致了这个问题?请注意,如果我 chmod 0777 iface_socket ,只有第一行 ( Access: (0600/srw-------) ) 发生变化;但不是下面的其他 3 个。

编辑 3:我想知道,也许这个主题会更好地转移到类 unix/unix 上?目前,尚不清楚谁在这个问题上过错。

编辑 4:只需像这样通过 strace 运行 PHP 脚本:
strace php -nef /var/www/html/index.php

输出中的相关行:
socket(PF_FILE, SOCK_STREAM, 0)         = 3
fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(3, {sa_family=AF_FILE, path="/root/.dropbox/iface_socket"...}, 29) = 0
fcntl(3, F_SETFL, O_RDWR) = 0
close(3) = 0

最佳答案

在 Apache 与 Dropbox 在同一用户下运行的极少数情况下,我会像通常从终端一样使用 python 命令行界面 (Debian)/usr/bin/dropbox。

root@DevServer1:~# dropbox help
Dropbox command-line interface

commands:

Note: use dropbox help <command> to view usage for a specific command.

status get current status of the dropboxd
help provide help
puburl get public url of a file in your dropbox
stop stop dropboxd
running return whether dropbox is running
start start dropboxd
filestatus get current sync status of one or more files
ls list directory contents with current sync status
autostart automatically start dropbox at login
exclude ignores/excludes a directory from syncing

前端脚本只能由运行 Dropbox 的用户有效使用。其他人都应该得到“Dropbox 没有运行!”输出。在您的情况下,您应该能够在 PHP 中以您认为合适的方式操作 Dropbox。就我个人而言,我将 Dropbox 作为受限用户运行,而不是我的 super 用户。使用组,您可以安全地随意链接文件夹,并强制执行文件权限。
<?php
$output = shell_exec('dropbox status');
echo "<pre>$output</pre>";

Dropbox 没有运行!

关于PHP 和 Linux IPC 套接字(和 Dropbox),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5213708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com