上下文:我正在制作一个浏览器内控制面板,让我可以通过一个按钮访问我为处理项目的各种数据而编写的脚本库(.sh 和 .php)。这是管理该项目数据的“一站式商店”。
我取得了很好的进步。我有 apache、PHP 和 MySQL 正在运行,我的前端位于http://localhost。目前很好!
现在我遇到的问题是:我有一个运行良好的 index.php,除了默认的 apache 用户(在我的机器上称为“_www”)似乎没有权限运行我的一些脚本。
所以当我这样做时:
<?php
echo `ls`;
echo `whoami`;
echo `/Path/To/Custom/Script.sh`;
?>
Run Code Online (Sandbox Code Playgroud)
我得到lsand的输出whoami,但我从自定义脚本中没有得到任何回报。如果我像我一样运行自定义脚本(在交互式 shell 中),它当然可以工作。
最后,我的问题是:配置它的正确方法是什么。网络服务器是否像我一样运行?或者更改权限以便 _www 可以运行我的自定义脚本?
我有 php 文件以及任何文件类型,我希望 vim 在此处使用不同的语法突出显示突出显示文档部分。
<?php
echo <<<HTMLDOC
<h1> I am highlighted as html </h1>
<<<HTMLDOC
echo 'High Lighted as PHP again '
?>
Run Code Online (Sandbox Code Playgroud) 我最近迁移到 Archlinux。我根据Arch Linux LAMP wiki 页面安装了 Apache、php 和 mysql 。
现在我已经为我的新Symfony项目设置了一个虚拟主机。
对于我提出的每个请求,我都会收到此错误:
[notice] child pid 10859 exit signal Segmentation fault (11)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
$ type 1.sh
#!/bin/bash -eu
php <(echo 12)
$ ./1.sh
2
$ type 2.sh
#!/bin/bash -eu
cat <(echo 12)
$ ./2.sh
12
$ type 3.sh
#!/bin/bash -eu
echo 12 | php
$ ./3.sh
12
$ type 4.sh
#!/bin/bash -eu
rm -f named_pipe
mknod named_pipe p
echo 12 > named_pipe
$ ./4.sh
$ php named_pipe # from another window
2
Run Code Online (Sandbox Code Playgroud)
我在Debian( php-5.4.14, bash-4.1.5) 和Arch Linux( php-5.4.12, bash-4.2.42)上测试了它。
在 CentOS 6.3(编辑:更新至 6.4)中,我无法安装任何 PHP(MySQL 和许多其他)软件包。
例如输出yum install php-devel是:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.vit.com.tr
* extras: mirrors.prometeus.net
* rpmforge: mirror.nl.leaseweb.net
* updates: mirrors.prometeus.net
Setting up Install Process
No package php-devel available.
Error: Nothing to do
Run Code Online (Sandbox Code Playgroud)
的输出ls /etc/yum.repos.d:
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo mirrors-rpmforge rpmforge.repo
Run Code Online (Sandbox Code Playgroud)
grep -E "name|enabled" /etc/yum.repos.d/*:
/etc/yum.repos.d/CentOS-Base.repo:name=CentOS-$releasever - Base
/etc/yum.repos.d/CentOS-Base.repo:name=CentOS-$releasever - Updates
/etc/yum.repos.d/CentOS-Base.repo:name=CentOS-$releasever - Extras
/etc/yum.repos.d/CentOS-Base.repo:name=CentOS-$releasever - Plus
/etc/yum.repos.d/CentOS-Base.repo:enabled=0
/etc/yum.repos.d/CentOS-Base.repo:name=CentOS-$releasever - Contrib
/etc/yum.repos.d/CentOS-Base.repo:enabled=0
/etc/yum.repos.d/CentOS-Debuginfo.repo:name=CentOS-6 - …Run Code Online (Sandbox Code Playgroud) 我们可以使用 linux (centos 6) 命令行 ( curl, wget,...)
但是我们无法通过 webserver (apache) 或 php 连接到它。
我做了setenforce 0命令,之后网络服务器和php可以连接。
哪个 selinux 规则导致了这个问题,以及在启用 selinux 时如何通过 web 服务器(或 php)进行连接?
我正在使用 nginx 网络服务器,我正在编写一个包含文件创建的脚本,但即使我在 sudoers 列表中授予权限,www-data 也无法创建文件。
在我的 sudoers 文件中:
www-data ALL=(ALL) NOPASSWD: /usr/bin/php, /usr/bin/python
我什至尝试授予 ALL 权限,但仍然无法通过浏览器创建文件..
www-data ALL=(ALL) NOPASSWD: ALL
我的简单脚本只想创建一个文件,它可以通过终端运行,但不能在浏览器上运行。
<?php
$data = "test";
shell_exec("sudo /bin/echo $data > /var/www/api/v3/monitoring/iam/temp");
Run Code Online (Sandbox Code Playgroud) 我需要为我的 apache 配置添加一个外部路径。(httpd)
所以,我在我的 httpd 根文件夹中做了一个指向这个路径的符号链接,路径是:/var/log/httpd/(我想直接在我的项目中显示日志)
我可以通过浏览器输入访问所有路径:http : //127.0.0.1/httpd/
但是当我尝试从 php 文件访问它时,php 抛出了一个错误:
代码:
function logInfo() {
$log_path = $_SERVER['DOCUMENT_ROOT'] . "/httpd/local.cmp-error_log";
$php_log = file_get_contents($log_path);
print_r ($php_log);
}
Run Code Online (Sandbox Code Playgroud)
错误:
[Sun Jul 17 23:45:19.960292 2016] [:error] [pid 19451] [client 127.0.0.1:34718] PHP Warning: file_get_contents(/home/txx/http/www/httpd/local.cmp-error_log): failed to open stream: Operation not permitted in /home/txx/http/www/base_home/config/sys.php on line 8
Run Code Online (Sandbox Code Playgroud)
这里的错误在哪里?
在 Debian 系统上,PHP 扩展二进制文件位于/usr/lib/php/. 里面是每个 PHP 版本的文件夹,例如7.2和7.3,以及以日期命名的文件夹,例如20170718和20180731。
使用安装扩展pecl install并不总是将.so文件添加到每个日期文件夹。例如跑步pecl install jsmin创建/usr/lib/php/20170718/jsmin.so但不/usr/lib/php/20180731/jsmin.so适合我。
这些日期代表什么?
我们正在运行:Red Hat Enterprise Linux 版本 8.5 (Ootpa)。我们允许服务器使用“yum -y update”每周更新一次。最近,我们在执行 shell 命令时开始收到以下错误:
我不知道我们所做的任何更改可能会导致此错误 - 这就是为什么我指向 yum 系统更新。我们的大部分代码都是用 php 编写的,其中我们使用 passthru() 来运行 shell 命令。当我们很少编写 shell 脚本时,我们通常使用 bash。
在运行使用 passthru() 的 php 脚本之前,我能够使用“unset which”来防止这些错误。我们从许多脚本运行许多 shell 命令。更新这些脚本中的每一个都不是有效的解决方案——不仅耗时而且可能会引入缺陷。
有趣的是,以下代码不会导致错误:
#!/bin/sh
echo hello
Run Code Online (Sandbox Code Playgroud)
有没有办法在系统或用户级别“取消设置”一次,以便每次运行 shell 时都会执行它?也许有一个我可以更改的外壳配置文件或类似的东西。
更新1
我在 /etc/profile.d/which2.sh 中找到了以下内容
# shellcheck shell=sh
# Initialization script for bash, sh, mksh and ksh
which_declare="declare -f"
which_opt="-f"
which_shell="$(cat /proc/$$/comm)"
if [ "$which_shell" = "ksh" ] || [ "$which_shell" = "mksh" ] || [ …Run Code Online (Sandbox Code Playgroud) php ×10
apache-httpd ×4
centos ×2
arch-linux ×1
files ×1
permissions ×1
pipe ×1
rhel ×1
selinux ×1
shell ×1
symfony ×1
symlink ×1
vim ×1
which ×1
yum ×1