php shell执行php脚本文件路径_shell 脚本打开路径执行文件 - CSDN
精华内容
参与话题
  • 题目中的上传包含两部分,一部分是上传文件,一部分是利用PHP执行脚本 上传文件到指定文件夹 所谓文件上传是指将本地文本文件,图片视频或者音频等文件上传到服务器上,以供后续操作的过程。 上传文件有几种...

    题目中的上传包含两部分,一部分是上传文件,一部分是利用PHP执行脚本

    上传文件到指定文件夹

    所谓文件上传是指将本地文本文件,图片视频或者音频等文件上传到服务器上,以供后续操作的过程。
    上传文件有几种方式,包括:
    - 单纯的form表单上传提交
    使用form表单的input[type=”file”]控件,打开系统的文件对话选择框,选择文件然后利用submit和form中跳转的action设置实现上传。
    优点:多浏览器兼容,简单
    缺点:PHP会限制浏览器上传文件的大小,而且form表单提交后会刷新页面,用户体验不好
    【注意】
    1. input中type要设置成type=”file”;
    2. 设置form中method=”post”;
    3. form中enctype中有三种取值
    image

    如果是文件上传,需要将enctype=”multipart/form-data”

    如果上传文件较大,需要配置php.ini文件(以上传500M以下大小的文件为例)
    查找以下选项并修改->
    file_uploads = On ;打开文件上传选项
    upload_max_filesize = 500M ;上传文件上限

    如果要上传比较大的文件,仅仅以上两条还不够,必须把服务器缓存上限调大,把脚本最大执行时间变长
    post_max_size = 500M ;post上限
    max_execution_time = 1800 ; Maximum execution time of each script, in seconds脚本最大执行时间
    max_input_time = 1800 ; Maximum amount of time each script may spend parsing request data
    memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)内存上限

    上代码:

        <form action="upload_file.php" method="post"
        enctype="multipart/form-data">
        <input type="file" name="file" id="file" /> 
        <input type="submit" name="submit" id="submit" value="Submit" />
        </form>

    效果如图:
    image
    原始的样子不太好看,为了美观大家可以使用label调整样式,例如

    css部分
    .btn {
        display: inline-block;
        margin-bottom: 0;
    
        user-select: none;
    }
    .btn-info {
        padding:8px;
        color: #ffffff;
        background-color: #40bbea;
        border-color: #29b3e7;
    }
    html部分    
    <div>
        <label for="fileName1" >文件上传:</label>
        <input type="text" name="fileName1" id="fileName1" style="height: 32px;width: 300px;" />
        <label class="btn btn-info" for="updateFile" style="margin-bottom: 3px;">浏览</label>
        <label class="btn btn-info" style="margin-bottom: 3px;" for="submit" >上传</label>
        <div class="col-xs-12">
            <form id= "uploadForm">
                <input type="file" id="updateFile" name="file"  style="position:absolute;clip:rect(0 0 0 0);">
                <input type="text" id="submit"  hidden="hidden">
            </form>
        </div>
    </div>

    修改后样式如图:
    image
    -html5的formdata、fileReader
    利用FormData模拟表单数据,然后通过ajax提交,用FileReader的readAsDataURL方法拿到base64地址来预览。

    html部分

        <div id= "uploadForm">
            <input type="text"  id="fileName" style="height: 32px;width: 300px;" />
            <label class="btn btn-info" for="file" style="margin-bottom: 3px;">
                <span>浏览</span>
            </label>
            <label  class="btn btn-info" style="margin-bottom: 3px;" for="submit">
                <span>上传</span>
            </label>
            <input type="file" id="file" name="file"     onchange="showPreview(this)"   style="position:absolute;clip:rect(0 0 0 0);">
            <input type="text" id="submit" onclick="doUpload()" hidden="hidden">
        </div> 

    JavaScript部分

        function showPreview(source) {  
            var arrs = $(source).val().split('\\'); 
            var filename=arrs[arrs.length-1]; 
            $("#fileName").val(filename);                
        }
        function doUpload() {  
            var formData = new FormData($( "#uploadForm" )[0]);  // 要求使用的html对象
            $.ajax({  
                  url: 'upload_file.php' ,  
                  type: 'POST',  
                  data: formData,  
                  async: true,  
                  // 下面三个参数要指定,如果不指定,会报一个JQuery的错误 
                cache: false,  
                  contentType: false, //不要设置Content-Type请求头,因为文件数据是以 multipart/form-data 来编码 
                  processData: false,//不处理数据  
                  success: function (returndata) { 
                    /*result = JSON.parse(returndata);*/
                    alert(returndata);  
                  },  
                  error: function (returndata) {  
                      alert(returndata);  
                  }  
             });
        }

    需要注意的部分:
    使用jQuery提供的ajax方法来发送二进制文件,还需要附加两个参数:

    processData: false // 不要对data参数进行序列化处理,默认为true
    contentType: false // 不要设置Content-Type请求头,因为文件数据是以 multipart/form-data 来编码
    upload_file.php

    <?php
    
    $url=realpath(dirname(__FILE__).'/../../'); //从当前位置退回到www文件夹目录,这一块儿可根据自己文件所在位置做修改
    if ($_FILES["file"]["error"] > 0)
    {
        switch($_FILES["file"]["error"])
        {
            case 1:
            echo "上传文件的大小超出了约定值";
            break;
            case 2:
            echo "上传文件太大 ";
            break;
            case 3:
            echo "文件只被部分上传";
            break;
            case 4:
            echo "没有上传任何文件";
            break;
            case 6:
            echo "未指定临时目录";
            break;
            case 7:
            echo "文件写入磁盘失败" ;
            break;
        }
    
    }
    else
    {
        $storePath = $url. "/upload" ;
        // 判断当期目录下的 upload 目录是否存在该文件
        // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
        if (!file_exists($storePath))
        {
            mkdir($storePath); 
        }
        else if (file_exists($storePath.'/'.$fileName))
        {
            echo $fileName . " 文件已经存在,如需更新,请点击下方'更新系统'按钮";
        }
        else
        {
            //如果 upload 目录不存在该文件则将文件上传到 upload 目录下
            //判断文件上传是否采用的POST方式
            if(is_uploaded_file($_FILES['file']['tmp_name']))
            { 
                if(move_uploaded_file($_FILES['file']['tmp_name'],$storePath.'/'.$fileName))
                {
                    chmod($storePath.'/'.$fileName,0755);//
                    echo "更新文件存储成功,如需更新,请点击下方'更新系统'按钮";
    
                }else{  
                    echo '更新文件存储失败';  
                }  
            }else{  
                echo '没有可存储的更新文件';  
            }
        }
    
    }
    ?>

    关于PHP上传文件

    通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

    第一个参数是表单的 input name,第二个下标可以是 “name”, “type”, “size”, “tmp_name” 或 “error”。就像这样:

    FILES[file][name]_FILES[“file”][“type”] - 被上传文件的类型
    FILES[file][size]_FILES[“file”][“tmp_name”] - 存储在服务器的文件的临时副本的名称
    $_FILES[“file”][“error”] - 由文件上传导致的错误代码
    这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制,例如上传格式和大小。

    保存上传的文件到指定文件夹

    使用move_uploaded_file(FILES[file][tmpname],storePath.’/’.fileName)moveuploadedfile(file,newloc)chmod(storePath.'/'.$fileName,0755);这个是为了修改上传文件的权限,因为上传文件的权限默认是644,所以如果有执行该文件的需求则需要自己手动修改权限;
    而标题的第二部分是利用php执行linux命令,shell脚本函数

    PHP执行外部命令的几个函数

    1. exec()
      string exec ( string command [, array &output [, int &return_var]] )
      说明
      前面是要执行的命令,但是exec执行系统外部命令时不会输出结果,而是返回结果的最后一行。如果想得到结果,可以使用第二个参数,让其输出到指定的数组。此数组一个记录代表输出的一行。即如果输出结果有20行,则这个数组就有20条记录,所以如果需要反复输出调用不同系统外部命令的结果,最好在输出每一条系统外部命令结果时清空这个数组unset($output),以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0
    2. shell_exec()
      string shell_exec ( string cmd)cm,输出命令执行结果,如果执行过程中发生错误或者进程不产生输出,则返回 NULL,所以,使用本函数无法通过返回值检测进程是否成功执行。
    3. system()
      string system ( string command [, int &return_var ] )
      说明:system和exec的区别在于,system在执行系统外部命令时,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
      状态码介绍
      如果返回0是运行成功,
      在Bash中,当错误发生在致命信号时,bash会返回128+signal number做为返回值。
      如果找不到命令,将会返回127。
      如果命令找到了,但该命令是不可执行的,将返回126。
      除此以外,Bash本身会返回最後一个指令的返回值。
      若是执行中发生错误,将会返回一个非零的值。
      Fatal Signal : 128 + signo
      Can’t not find command : 127
      Can’t not execute : 126
      Shell script successfully executed : return the last command exit status
      Fatal during execution : return non-zero
    4. passthru()
      void passthru ( string command [, int &return_var ] )
      说明: passthru与system的区别,passthru直接将结果输出到浏览器,不返回任何值,且其可以输出二进制,比如图像数据。第二个参数可选,是状态码。
      当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。 常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。 通过设置 Content-type 为 image/gif, 然后调用 pbmplus 程序输出 gif 文件, 就可以从 PHP 脚本中直接输出图像到浏览器。
    展开全文
  • PHP使用命令函数执行shell脚本 CentOS 7.6 64位 宝塔Linux面板 运行环境 Nginx 1.17.1 PHP-7.1 步骤 01 解除禁用的命令函数 出于安全考虑,命令函数是被禁用,我安装宝塔是被禁用的 #修改php.ini文件 ...

    PHP使用命令函数执行shell脚本

    • CentOS 7.6 64位
    • 宝塔Linux面板

    运行环境

    • Nginx 1.17.1
    • PHP-7.1

    步骤

    01 解除禁用的命令函数

    出于安全考虑,命令函数是被禁用,我安装宝塔是被禁用的

    #修改php.ini文件
    disable_functions =  #被禁用函数都在这一行 把需要解除的函数删除就行了 
    system exec passthru shell_exec #PHP常用命令函数
    

    02 PHP调用Linux命令权限不足的解决方法

    关于这个问题我踩的太多坑了,这也是我要写这篇文章的原因,我本人记性不好,所以记录一下

    • 01 查看启动你PHP的进程的用户是谁
    ps -ef | grep php #通过终端命令行执行查询
    echo exec('whoami'); #通过PHP命令函数查询 总来说默认没有任何权限
    
    • 02 添加一个用户和组 终端命令↓↓↓
    /usr/sbin/groupadd wroot  # wroot 用户可以自定义的
    /usr/sbin/useradd -g wroot -s /bin/bash wroot
    vim /etc/passwd #查看你刚刚添加的用户 是否添加成功
    

    wroot 是刚刚添加的

    • 03 修改PHP启动用户为您刚添加的用户
      php-fpm.conf 修改这个配置文件
      编辑成 user = wroot; group = wroot; (wroot为您刚才添加的用户)
    service php-fpm restart #命令重启php-fpm
    ps -ef | grep php #命令查看PHP启动进程的用户、是否已经变了
    
    • 04 添加刚才的用户wroot到sudoers里面
    visudo #命令修改 /etc/sudoers的内容
    ## Allow root to run any commands anywhere 
    root    ALL=(ALL)       ALL
    wroot   ALL=(ALL)       ALL //新添加这一行
    %wroot  ALL=(ALL)      NOPASSWD: ALL  
    #NOPASSWD为设置用户组下面的用户使用sudo不需要输入密码
    

    以上操作完成,但是我发现依然不能解决PHP命令shell脚本问题

    • 05 关于linux 用vi命令使用vi编辑(外话)
    s #vi界面出现 INSERT后,开始进行编辑操作 编辑完毕后,按ESC键,跳到命令模式
    :w #保存,不退出vi
    :w! #强制保存,不退出vi
    :w file #将修改另外保存到file中,但不退出vi
    :wq 或 :x #保存,并退出vi
    :wq! #强制保存,并退出vi
    :q #不保存,并退出vi
    :q! #不保存,并强制退出vi
    :e! #放弃所有修改,从上次保存文件开始再编辑
    

    03 但第二部操作还是无法解决PHP命令shell脚本问题

    还是权限问题,最后添加www-data ALL=(ALL) NOPASSWD: ALL解决了

    www-data ALL=(ALL) NOPASSWD: ALL #编辑visudo
    

    编辑visudo添加www-data

     

    编写test.sh脚本,简单的一个shell脚本 创建一个文件夹

    #! /bin/sh
    mkdir /www/a #注意.sh文件需要给执行权限
    
    #PHP
    system('sudo /usr/bin/test.sh') #注意绝对路径
    system('sudo /www/wwwroot/wert/prt.sh') #例如路径
    

    内容部分来源网络,我只是执行操作整理

    展开全文
  • php执行shell脚本

    千次阅读 2019-03-25 16:44:15
    原文:... php作为一门服务器端脚本语言,也是可以调用系统命令的,这其中就包括了执行shell脚本 编写test.sh脚本如下 #! /bin/sh ...很简单的一个shell脚本 创建一个文件夹 ...php脚本如下 system('/us...

    原文:https://blog.csdn.net/zhangsheng_1992/article/details/52805760 

    php作为一门服务器端脚本语言,也是可以调用系统命令的,这其中就包括了执行shell脚本


    编写test.sh脚本如下

    #! /bin/sh

    mkdir /www/a

    很简单的一个shell脚本 创建一个文件夹


    php脚本如下

    system('/usr/bin/test.sh')


    在运行前 首先需要验证的

    1.test.sh脚本是否具有可执行权限

    2.apache nginx phttp等web服务器是否有test.sh的权限

    3.由于是同步文件命令 所以需要确保用户对要下载的目录有写入权限

    4.由于我使用php版本高于5.4,已经删除了安全模式一说,说一也不存在运行在安全模式下

    5.执行的脚本请使用绝对路径 这点很重要


    但是  实际运行后  我发现输出了faild  说明脚本并没有执行成功  查了下原因  是因为apache用户不具备某些目录的执行权限(没个用户有没个用户的可执行目录,你的脚本需要在该目录下)   切换目录属主容易造成安全问题  在linux下 root用户是不受此限制的 所以 临时让用户可以切换到root权限 既可以简单的规避此类问题  如何操作呢?

    首先 查看你的apache用户或者nginx php-fpm用户

    可以使用 ps -ef  | grep httpd 命令来查看  其他同理

    经查我的apache用户为_www用户

    然后 visudo   或者 vim /etc/sudoers 找到

    ## Allow root to run any commands anywhere 

    root    ALL=(ALL)       ALL这一行 在下边追加

    _www ALL=(root)  NOPASSWD:ALL
    第一列是用户  第二个是可以切换到的用户 我这里写的是root  如果你想让随意切换可以在这里写All  第三个是可以执行的脚本路径 ALL 表示所有

    最后 重启apache让用户重新获得权限

    修改php脚本

    system('sudo /usr/bin/test.sh')


    运行 执行成功~~~

    展开全文
  • shell脚本调用php代码

    千次阅读 2011-08-22 16:04:32
    shell里可以通过cgi模式来调用php,例如下面 /usr/php5/bin/php -q /var/html/demo.php 当需要并发处理一些php程序时 在其后面加上& 有的时候可以需要传些参数 /usr/php5/bin/php -

    shell里可以通过cgi模式来调用php,例如下面

    /usr/php5/bin/php -q  /var/html/demo.php

    当需要并发处理一些php程序时  在其后面加上&

    有的时候可以需要传些参数

    /usr/php5/bin/php -q  /var/html/demo.php hehe 3

    这样的话就向demo.php新传输了2个参数 hehe 以及 3

    在php里面可以通过$argv获取参数,demo.php的参数$argv[0] 为文件路径、$argv[1] 为呵呵 、$argv[2] 为3




    展开全文
  • php利用sudo权限执行shell脚本

    万次阅读 2017-03-17 11:47:30
    php作为一门服务器端脚本语言,也是可以调用系统命令的,这其中就包括了执行shell脚本 最近有一个需求,由于http的表单方式上传文件过慢,需要通过其他方式传输文件,讨论了scp与rsync后 最终决定使用scp工具 编写test....
  • PHP shell 脚本(以脚本方式执行php)

    千次阅读 2009-07-31 17:20:00
    文件phpshell.php内容: phpinfo();?>1、[sahusoft@localhost ]$php phpshell.php2、在phpshell.php文件的第一行加上如下内容: #!/usr/bin/php -q 其中具体php的路径按实际情况填写。 [sahusoft@localhost ]$...
  • linux shell脚本获得当前文件路径

    千次阅读 2011-02-10 10:22:00
    php当中获得当前文件路径用:  dirname(__FILE__) 在shell当中没有直接的变量和函数, $(cd "$(dirname "$0")"; pwd)   但是把他用在嵌套脚本时就会发生问题。例如我在脚本a...
  • 利用PHP利用root权限执行shell脚本必须进行以下几个步骤:(所有步骤都是我亲自实验,若有不妥可指出,谢谢!) 1. 确定一下你的Apache的执行用户是谁。注:不一定就是nobody,我自行安装的httpd,我的Apac
  • 当你在上传文件的时候需要同步到另外机器的时候,可以执行shell脚本实现文件同步#! /bin/bash a=$1 b=$2 ip=$3 port=$4 passwd=$5 /bin/rpm -qa|/bin/grep -q expect if [ $? -ne 0 ];then echo "please install ...
  • 选择文件: if(isset($_POST['sub'])) {  $datetime=date("Ymdhis");  $arr=explode(".",$_FILES["myrar"]["name"]);  $exce=$arr[1];//获取扩展名  $allowar
  • PHP作为Shell脚本语言使用

    千次阅读 2004-11-20 10:37:00
    PHP作为Shell脚本语言使用 可能很多人都想过使用PHP编写一些定时发信之类的程序,但是却没有办法定时执行PHP;一次去PHPBuilder的时候,发现了这一篇文章,于是想给大家翻译一下(同时做了一些修改),希望对大家...
  • linux下shell执行PHP不成功问题

    千次阅读 2016-10-11 17:42:18
    保证服务挂了或被操作系统误杀后能自动重启然后把.sh脚本加入到crontab里去,我设的是每隔1min执行一次的,过了1min发现服务还没有起来,于是查看cron有没有执行我的shell脚本,用 tail -f /var/logs/cron查看发现...
  • 脚本文件的绝对路径存在了环境变量filepath中,可以用 echo $filepath 查看完整路径   在shell中: $0: 获取当前脚本的名称 $#: 传递给脚本的参数个数 $$: shell脚本的进程号 $1, $2, $3...:脚本程序的...
  • 首先php可以写linux的shell脚本,是非常快捷方便的,也展现了php的强大。 (1)讲解头部的一些开头文件代表什么意思。 eg #!/usr/bin/env php #!/usr/bin/php 哎,看了网上的一些说法,说只要平常写#!/usr/...
  • 零、前言 1、我用的是 LNMP 环境,好像 第三、四步 都不用做,因为默认的 “disable_functions=” 后面为空,也就是没有禁用掉...2,注意文件的可读写或执行权限 3,修改php位置文件php.ini sudo vim /etc/php5/...
  • 常见的一种误区,是使用 pwd 命令,该命令的作用是“print name of current/working ...你可以试试 bash shell/a.sh,a.sh 内容是 pwd,你会发现,显示的是执行命令的路径 /home/june,并不是 a.sh 所在路径:/...
  • php运行shell脚本

    2014-07-26 23:18:49
    PHP运行一个shell脚本或命令给系统管理员带来很多便利。我们可以通过click页面,执行php从而减少重复的代码录入,提高开发效率 通过正确设置,shell脚本和命令可以通过简单地要求在WEB网页上运行。网站的服务器会...
  • shell 脚本中,通常会使用相对路径来做处理,但有时候,我们也许需要用到绝对路径。 在shell怎么获取一个文件或目录的绝对路径呢? 也许你会立马想到realpath(如果你写过php的话),那么shell支持这个命令吗?看...
  • Linux 执行定时任务 shell脚本

    万次阅读 2017-12-26 11:42:10
    Linux上面执行定时任务,我们可以利用crontab -e直接编辑定时任务 另外我们还可以写好shell脚本,定时去执行shell脚本,这两个方法都可以起到定时执行的作用 下面我详细说一下入如何执行shell脚本 1.声明一下我...
1 2 3 4 5 ... 20
收藏数 28,543
精华内容 11,417
关键字:

php shell执行php脚本文件路径