GVKun编程网logo

php – SVN在Windows和Linux机器上通过Web表单更新

5

如果您想了解php–SVN在Windows和Linux机器上通过Web表单更新的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于JavaPhantomjs在windows和linux中表现不

如果您想了解php – SVN在Windows和Linux机器上通过Web表单更新的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于Java Phantomjs在windows和linux中表现不同、Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同、JDK在windows和linux中安装配置指南、Linux svn仓库备份到Windows机器上的有价值的信息。

本文目录一览:

php – SVN在Windows和Linux机器上通过Web表单更新

php – SVN在Windows和Linux机器上通过Web表单更新

我一直在这方面工作,我找不到解决方案(如果有的话).

所以问题是:有没有办法通过HTML Web表单执行svn更新请求?

我已经测试了多个基于Web的SVN客户端(包括构建我自己的),但他们都无法进行更新.

我理解这是PHP使用的用户权限的问题,但即使我将系统上的所有文件都设置为777(在虚拟机上尝试过),我也无法将其归档.

有人有这方面的经验吗?

谢谢你.

我还浏览了所有目录并将所有者设置为Everyone并具有完全访问权限.现在不存在许可问题……我想.

最后编辑:
如果脚本文件不在svn目录的根目录中,我似乎无法执行SVN.最终的代码现在看起来像这样:http://codepad.org/Kb2K8e6m

解决方法:

以下功能应该或多或少地为您做.它还打印出来:

>它在shell中执行的确切命令
>命令的输出(包括错误),以便它也可以被调试.

function updatesvn() {

    if ( isset($_POST) ) {

        //Get svn username and password from request parameters

        $username = <your_svn_username>;
        $password = <your_svn_password>;

        //Get version number to move to
        $values = $_POST;
        $version = $values['revision'];

        //validate version number

        //Path where you have checked out your project
        $rpath = '/var/www/myproj';

        //Command to svn update
        $cmd = "cd $rpath; svn cleanup; svn --non-interactive --username $username --password $password update -r $version 2>&1";

        echo $cmd;
        $out = shell_exec($cmd);

        echo $out;
    }
}

编辑:谨防此代码中的安全漏洞.我在这里简化了它.我们在其中一个应用程序中使用了它,其中达到此点的用户已预先通过身份验证,成为Web应用程序的管理员用户.此外,此代码在MVC框架中执行,其中输入的验证在中央位置完成,然后在控制器中执行操作.

Java Phantomjs在windows和linux中表现不同

Java Phantomjs在windows和linux中表现不同

我一直试图解决这个问题,但不知道是什么原因,
我使用 java和phantomjs制作了一个程序,理论上它们都应该以相同的方式运行.

pc和服务器中的Phantomjs是相同的v.2.0.

在Windows(v.7)中,mi测试程序按预期工作,但在linux(debian)中,程序失败,当它尝试单击一个元素时出现此错误:

Caused by: org.openqa.selenium.NoSuchElementException: {"errorMessage":"Unable to find element with css selector

现在,我知道有时候我们必须等待几秒才能加载页面,这已经做了(甚至还添加了一些以确保)并且它已在Windows中正确测试.

我试过点击功能:

element.click();

使用javascript代码:

JavascriptExecutor js = (JavascriptExecutor)driver;
    js = (JavascriptExecutor)driver;
    js.executeScript("arguments[0].click();",element)

并采取行动:

Actions action = new Actions(driver);
action.movetoElement(element).contextClick().build().perform();     
//and this code too
action.movetoElement(element).click().build().perform();

有人有同样或类似的问题吗?我还能做什么?我从昨天起就陷入了困境,我无法弄清楚这个问题.

注意:现在我有另一种方法来获取页面而不进行交互,但在不同的操作系统中执行时仍然会从网页获得不同的结果,例如:

通常我得到这个链接:www.somesite.com/?search = xxxxx& date_in = dd / MM / yyyy& params = etc.相反,我得到www.somesite.com/?search=xxxxx,默认搜索没有任何特定的搜索参数.

解决方法

你需要使用 onResourceError回调,找出出了什么问题.
您还需要使用以下 Command-Line选项:
--ignore-ssl-errors=true --ssl-protocol=any --debug=true

另见:this issue.

Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同

Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同

一)什么是AES?

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

那么为什么原来的DES会被取代呢,,原因就在于其使用56位密钥,比较容易被破解。而AES可以使用128、192、和256位密钥,并且用128位分组加密和解密数据,相对来说安全很多。完善的加密算法在理论上是无法破解的,除非使用穷尽法。使用穷尽法破解密钥长度在128位以上的加密数据是不现实的,仅存在理论上的可能性。统计显示,即使使用目前世界上运算速度最快的计算机,穷尽128位密钥也要花上几十亿年的时间,更不用说去破解采用256位密钥长度的AES算法了。

目前世界上还有组织在研究如何攻破AES这堵坚厚的墙,但是因为破解时间太长,AES得到保障,但是所用的时间不断缩小。随着计算机计算速度的增快,新算法的出现,AES遭到的攻击只会越来越猛烈,不会停止的。

AES现在广泛用于金融财务、在线交易、无线通信、数字存储等领域,经受了最严格的考验,但说不定哪天就会步DES的后尘。

二)AES加密解密 以下为window下的源码:(注意 如果在linux或者mac电脑上执行 ,是不对的)

package demo.security;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Scanner;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/*
 * AES对称加密和解密
 */
public class SymmetricEncoder {
  /*
   * 加密
   * 1.构造密钥生成器
   * 2.根据ecnodeRules规则初始化密钥生成器
   * 3.产生密钥
   * 4.创建和初始化密码器
   * 5.内容加密
   * 6.返回字符串
   */
    public static String AESEncode(String encodeRules,String content){
        try {
            //1.构造密钥生成器,指定为AES算法,不区分大小写
            KeyGenerator keygen=KeyGenerator.getInstance("AES");
            //2.根据ecnodeRules规则初始化密钥生成器
            //生成一个128位的随机源,根据传入的字节数组
            keygen.init(128, new SecureRandom(encodeRules.getBytes()));
              //3.产生原始对称密钥
            SecretKey original_key=keygen.generateKey();
              //4.获得原始对称密钥的字节数组
            byte [] raw=original_key.getEncoded();
            //5.根据字节数组生成AES密钥
            SecretKey key=new SecretKeySpec(raw, "AES");
              //6.根据指定算法AES自成密码器
            Cipher cipher=Cipher.getInstance("AES");
              //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY
            cipher.init(Cipher.ENCRYPT_MODE, key);
            //8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
            byte [] byte_encode=content.getBytes("utf-8");
            //9.根据密码器的初始化方式--加密:将数据加密
            byte [] byte_AES=cipher.doFinal(byte_encode);
          //10.将加密后的数据转换为字符串
            //这里用Base64Encoder中会找不到包
            //解决办法:
            //在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。
            String AES_encode=new String(new BASE64Encoder().encode(byte_AES));
          //11.将字符串返回
            return AES_encode;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        
        //如果有错就返加nulll
        return null;         
    }
    /*
     * 解密
     * 解密过程:
     * 1.同加密1-4步
     * 2.将加密后的字符串反纺成byte[]数组
     * 3.将加密内容解密
     */
    public static String AESDncode(String encodeRules,String content){
        try {
            //1.构造密钥生成器,指定为AES算法,不区分大小写
            KeyGenerator keygen=KeyGenerator.getInstance("AES");
            //2.根据ecnodeRules规则初始化密钥生成器
            //生成一个128位的随机源,根据传入的字节数组
            keygen.init(128, new SecureRandom(encodeRules.getBytes()));
              //3.产生原始对称密钥
            SecretKey original_key=keygen.generateKey();
              //4.获得原始对称密钥的字节数组
            byte [] raw=original_key.getEncoded();
            //5.根据字节数组生成AES密钥
            SecretKey key=new SecretKeySpec(raw, "AES");
              //6.根据指定算法AES自成密码器
            Cipher cipher=Cipher.getInstance("AES");
              //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY
            cipher.init(Cipher.DECRYPT_MODE, key);
            //8.将加密并编码后的内容解码成字节数组
            byte [] byte_content= new BASE64Decoder().decodeBuffer(content);
            /*
             * 解密
             */
            byte [] byte_decode=cipher.doFinal(byte_content);
            String AES_decode=new String(byte_decode,"utf-8");
            return AES_decode;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        
        //如果有错就返加nulll
        return null;         
    }
    
    public static void main(String[] args) {
        SymmetricEncoder se=new SymmetricEncoder();
        Scanner scanner=new Scanner(System.in);
        /*
         * 加密
         */
        System.out.println("使用AES对称加密,请输入加密的规则");
        String encodeRules=scanner.next();
        System.out.println("请输入要加密的内容:");
        String content = scanner.next();
        System.out.println("根据输入的规则"+encodeRules+"加密后的密文是:"+se.AESEncode(encodeRules, content));
       
        /*
         * 解密
         */
        System.out.println("使用AES对称解密,请输入加密的规则:(须与加密相同)");
         encodeRules=scanner.next();
        System.out.println("请输入要解密的内容(密文):");
         content = scanner.next();
        System.out.println("根据输入的规则"+encodeRules+"解密后的明文是:"+se.AESDncode(encodeRules, content));
    }

}

三)测试结果

使用AES对称加密,请输入加密的规则
使用AES对称加密
请输入要加密的内容:
使用AES对称加密
根据输入的规则使用AES对称加密加密后的密文是:Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
使用AES对称解密,请输入加密的规则:(须与加密相同)
使用AES对称加密
请输入要解密的内容(密文):
Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
根据输入的规则使用AES对称加密解密后的明文是:使用AES对称加密

 

二、如果在window上面执行上面的代码是正确的,但是如果在linux或者mac上执行,就会报错:

javax.crypto.BadPaddingException: Given final block not properly padded

经过一番调试,找到真正原因:javax.crypto.BadPaddingException: Given final block not properly padded

package com.daredo.utils;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;

/**
 * Created by IntelliJ IDEA
 * Author: d-arlin@qq.com
 * Date: 2018/3/14
 * Time: 15:38
 */
public class SecurityUtils {

    /**
     * 编码格式
     */
    private static String ENCODING = "UTF-8";
    /**
     * 加密算法
     */
    public static final String KEY_ALGORITHM = "AES";

    /**
     * 加密
     *
     * @param content 待加密内容
     * @param key     加密的密钥
     * @return
     */
    public static String encrypt(String content, String key) {
        try {
            KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
            kgen.init(128, new SecureRandom(key.getBytes(ENCODING)));
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
            Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
            byte[] byteContent = content.getBytes(ENCODING);
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            byte[] byteRresult = cipher.doFinal(byteContent);
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteRresult.length; i++) {
                String hex = Integer.toHexString(byteRresult[i] & 0xFF);
                if (hex.length() == 1) hex = ''0'' + hex;
                sb.append(hex.toUpperCase());
            }
            return sb.toString();
        } catch (Exception e) {
            e.toString();
        }
        return null;
    }

    /**
     * 解密
     *
     * @param content 待解密内容
     * @param key     解密的密钥
     * @return
     */
    public static String decrypt(String content, String key) {
        if (content.length() < 1) return null;
        byte[] byteRresult = new byte[content.length() / 2];
        for (int i = 0; i < content.length() / 2; i++) {
            int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
            byteRresult[i] = (byte) (high * 16 + low);
        }
        try {
            KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
            kgen.init(128, new SecureRandom(key.getBytes(ENCODING)));
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
            Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
            byte[] result = cipher.doFinal(byteRresult);
            return new String(result, ENCODING);
        } catch (Exception e) {
            e.toString();
        }
        return null;
    }

}

那么为什么在Windows正常,在Linux就出现异常呢?

原因分析
SecureRandom 实现完全随操作系统本身的內部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;

该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。

解决方法

package com.daredo.utils;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;

/**
 * Created by IntelliJ IDEA
 * Author: d-arlin@qq.com
 * Date: 2018/3/14
 * Time: 15:38
 */
public class SecurityUtils {

    /**
     * 编码格式
     */
    private static final String ENCODING = "UTF-8";
    /**
     * 加密算法
     */
    public static final String KEY_ALGORITHM = "AES";
    /**
     * 签名算法
     */
    public static final String SIGN_ALGORITHMS = "SHA1PRNG";

    /**
     * 加密
     *
     * @param content 待加密内容
     * @param key     加密的密钥
     * @return
     */
    public static String encrypt(String content, String key) {
        try {
            KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
            SecureRandom random = SecureRandom.getInstance(SIGN_ALGORITHMS);
            random.setSeed(key.getBytes(ENCODING));
            kgen.init(128, random);
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
            Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
            byte[] byteContent = content.getBytes(ENCODING);
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            byte[] byteRresult = cipher.doFinal(byteContent);
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteRresult.length; i++) {
                String hex = Integer.toHexString(byteRresult[i] & 0xFF);
                if (hex.length() == 1) hex = ''0'' + hex;
                sb.append(hex.toUpperCase());
            }
            return sb.toString();
        } catch (Exception e) {
            e.toString();
        }
        return null;
    }

    /**
     * 解密
     *
     * @param content 待解密内容
     * @param key     解密的密钥
     * @return
     */
    public static String decrypt(String content, String key) {
        if (content.length() < 1) return null;
        byte[] byteRresult = new byte[content.length() / 2];
        for (int i = 0; i < content.length() / 2; i++) {
            int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
            byteRresult[i] = (byte) (high * 16 + low);
        }
        try {
            KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
            SecureRandom random = SecureRandom.getInstance(SIGN_ALGORITHMS);
            random.setSeed(key.getBytes(ENCODING));
            kgen.init(128, random);
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, KEY_ALGORITHM);
            Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
            byte[] result = cipher.doFinal(byteRresult);
            return new String(result, ENCODING);
        } catch (Exception e) {
            e.toString();
        }
        return null;
    }

}

改动的地方如代码中已标红。

参考:javax.crypto.BadPaddingException: Given final block not properly padded

参考:Java实现AES加密

JDK在windows和linux中安装配置指南

JDK在windows和linux中安装配置指南

1 Windows下安装、配置jdk

1.1 准备工作

到http://pan.baidu.com/s/1i3l6MDR下载

jdk-7u55-windows-x64.exe

1.2 安装

 

双击运行jdk-7u55-windows-x64.exe

 







 

1.3 配置环境变量

新建JAVA_HOME变量,值为 C:\JAVA\jdk1.7.0_55

Path变量最后追加: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

新建CLASSPATH变量,值为 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

1.4 验证

cmd中,执行命令:

java –version

 

至此,windows版的jdk安装完成

2 Linux下安装、配置jdk

2.1 准备工作

到http://pan.baidu.com/s/1jGzbUN8下载

jdk-7u55-linux-x64.rpm

此处放到/root/source/jdk-7u55-linux-x64.rpm

2.2 安装

运用cd命令,把目录切换到/root/source

运行命令:

rpm -ivh jdk-7u55-linux-x64.rpm

 

2.3 配置环境变量

编辑/etc/profile文件

在这个文件最后添加:

JAVA_HOME=/usr/java/jdk1.7.0_55

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export JAVA_HOME PATH CLASSPATH

 

保存并退出

2.4 验证

注销并重新登录

运行命令:java -version

 

Linux svn仓库备份到Windows机器上

Linux svn仓库备份到Windows机器上

Linux svn仓库备份到Windows机器上

1,需求说明,Linux作为主库(A),Windows作为本地备份库(B),要求每天将Linux库中的代码备份到本地

2,B机器上安装svn服务端

 

3,

4,创建一个新的svn仓库(仓库必须是新创建的而且不能有提交,更新等操作)

 

 

进入仓库的hooks文件夹,复制pre-revprop-change.tmpl 文件,重命名为pre-revprop-change.bat  ,编辑pre-revprop-change.bat文件  删除全部内容,输入exit 0 保存

 

 

5、执行同步要使用到两个命令
1、svnsync init
初始化,建立目标库和源库之间的同步关系
命令格式 svnsync init 目标库URL 源库URL
2、svnsync sync
真正的同步
命令格式 svnsync sync 目标库URL

 

全部操作如下图所示

 

 

 

C:\Users\Administrator>svnsync init file:///E:\lywebsite svn://39.105.111.20/lyw

Ebsite

 

C:\Users\Administrator>svnsync sync  file:///E:\lywebsite

 

 

执行svnsync init 时先会让你填写administrator的密码,随便输入就行

接下来输入svn的账号密码

最后执行svnsync sync ,这一步有可能也会让你输入用户名密码

可使用下面的格式,带上用户名和密码

svnsync sync file:///svn/proj1 –username username –password password

 

 

问题:

1. Repository has not been enabled to accept revision propchanges

解决方法:

Linux:

hooks下新建pre-revprop-change文件,内容是

#!/bin/sh

exit 0;

 

Windows:

hooks下新建pre-revprop-change.bat文件, 内容为空即可

 

2. Revprop change blocked by pre-revprop-change hook (exit code 255) with no output

解决方法:

Linux:

chmod a+x pre-revprop-change

3,svnsync: Destination HEAD (593) is not the last merged revision (592);

have you committed to the destination without using svnsync?

解决方法

svn propset --revprop -r0 svn:sync-last-merged-revision 593 file:///home/test/svn/test

 

今天关于php – SVN在Windows和Linux机器上通过Web表单更新的分享就到这里,希望大家有所收获,若想了解更多关于Java Phantomjs在windows和linux中表现不同、Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同、JDK在windows和linux中安装配置指南、Linux svn仓库备份到Windows机器上等相关知识,可以在本站进行查询。

本文标签: