php的exec在linux中返回值不能为负数的问题_PHP教程
exec函数在windows环境下是没有任何问题的,但在linux中返回值不能为负数。
string exec ( string $command [, array &$output [, int &$return_var ]] )
第三个参数, 怎么不能接收负数??
这里的&$return_var就是程序返回值,起初我的回答是可以为负数。
一般在C语言里我们会这样写
代码如下 | 复制代码 |
#include |
这个-5就是返回值,但习惯上是写成0或者1的。
注意:很多人的C代码里把main函数写成 void main() 这样实际上是不对的,详细的就不说了。
把上面的代码编译后,到CMD下运行,然后就能看到输出结果了。接着,输入“echo %ERRORLEVEL%”,回车,就可以看到程序的返回值了。这个%ERRORLEVEL%就代表了程序的返回状态。在WIN下确实是可以为负数的。如图所示:
,php调用也是正常的。
代码如下 | 复制代码 |
E:devphp535>php -r "exec('return.exe',$out,$a);var_dump($a);" int(-2) |
但是到了linux下,始终为正数,刚开始怀疑是权限问题,用了chmod +x后,排除了权限问题。
代码如下 | 复制代码 |
exec("/home/wwwroot/test/rtest.out 2>&1",$out,$a); var_dump($out,$a); array(1) { [0]=> string(3) "^_^" } int(251) |
看起来成了256+return val,可以看到实际上返回了负数,只不过被转换成正数了。
接着看了下standard/exec.c里的源代码,没发现啥端倪,干到很奇怪,突然想到自己忘了一步。忘了看程序返回给OS的值了.
可以使用echo $? 显示最后命令的推出状况。
代码如下 | 复制代码 |
-bash-3.00$ vi main.c -bash-3.00$ gcc -o ./mm main.c -bash-3.00$ ll total 48 drwxr-xr-x 3 www www 4096 May 4 2011 2011 drwxr-xr-x 6 www www 4096 Jun 23 2011 eoc -rwxr-xr-x 1 www www 7131 Feb 1 12:47 hello -rw-r--r-- 1 www www 3 Feb 1 12:51 hello.c -rw-r--r-- 1 www www 99 Feb 1 12:50 main.c -rwxr-xr-x 1 www www 4714 Feb 1 12:51 mm drwxr-xr-x 3 www www 4096 Jun 24 2011 test -bash-3.00$ ./mm ^_^ -bash-3.00$ echo $? 251 -bash-3.00$ |
这样就可以看看exec返换给OS的值是多少。
在linux下,这个返回值就是无符号类型,返回的是一个正数,所以传给php也是正数了,php实际上也是调用的exec所返回的值。
exec目录操作
2down vote For greater control over how the child process will be executed, you can use the proc_open() function:
2 down vote
For greater control over how the child process will be executed, you can use the proc_open() function:
代码如下 | 复制代码 |
$cmd = 'Scripts/script.sh'; |

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux는 풍부한 도구와 커뮤니티 지원을 제공하는 기본 플랫폼이기 때문에 Docker는 Linux에서 중요합니다. 1. Docker 설치 : Sudoapt-Getupdate 및 Sudoapt-GetInstalldocker-Cedocker-Ce-clicotainerd.io를 사용하십시오. 2. 컨테이너 생성 및 관리 : Dockerrun-D-Namemynginx-P80 : 80nginx와 같은 Dockerrun 명령을 사용하십시오. 3. Dockerfile 쓰기 : 이미지 크기를 최적화하고 다단계 구성을 사용하십시오. 4. 최적화 및 디버깅 : DockerLogs 및 Dockerex를 사용하십시오

IIS 및 PHP는 호환 가능하며 FastCGI를 통해 구현됩니다. 1. IIS 구성 파일을 통해 .php 파일 요청을 FastCGI 모듈로 전달합니다. 2. FASTCGI 모듈은 PHP 프로세스를 시작하여 요청을 처리하여 성능과 안정성을 향상시킵니다. 3. 실제 응용 프로그램에서는 구성 세부 사항, 오류 디버깅 및 성능 최적화에주의를 기울여야합니다.

C의 DMA는 직접 메모리 액세스 기술인 DirectMemoryAccess를 말하며 하드웨어 장치는 CPU 개입없이 데이터를 메모리로 직접 전송할 수 있습니다. 1) DMA 운영은 하드웨어 장치 및 드라이버에 크게 의존하며 구현 방법은 시스템마다 다릅니다. 2) 메모리에 직접 액세스하면 보안 위험이 발생할 수 있으며 코드의 정확성과 보안이 보장되어야합니다. 3) DMA는 성능을 향상시킬 수 있지만 부적절하게 사용하면 시스템 성능이 저하 될 수 있습니다. 실습과 학습을 통해 우리는 DMA 사용 기술을 습득하고 고속 데이터 전송 및 실시간 신호 처리와 같은 시나리오에서 효과를 극대화 할 수 있습니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

Linux의 핵심 구성 요소에는 커널, 파일 시스템, 쉘, 사용자 및 커널 공간, 장치 드라이버 및 성능 최적화 및 모범 사례가 포함됩니다. 1) 커널은 하드웨어, 메모리 및 프로세스를 관리하는 시스템의 핵심입니다. 2) 파일 시스템은 데이터를 구성하고 Ext4, BTRF 및 XFS와 같은 여러 유형을 지원합니다. 3) Shell은 사용자가 시스템과 상호 작용하고 스크립팅을 지원하는 명령 센터입니다. 4) 시스템 안정성을 보장하기 위해 사용자 공간을 커널 공간과 별도로 분리하십시오. 5) 장치 드라이버는 하드웨어를 운영 체제에 연결합니다. 6) 성능 최적화에는 튜닝 시스템 구성 및 다음 모범 사례가 포함됩니다.

Centos는 우수한 보안, 안정성 및 성능을위한 서버 및 엔터프라이즈 환경을위한 첫 번째 선택입니다. 1) Security는 SELINUX를 통해 강제 액세스 제어를 제공하여 시스템 보안을 개선합니다. 2) 안정성은 시스템의 안정성을 보장하기 위해 최대 10 년 동안 LTS 버전에 의해 지원됩니다. 3) 성능은 커널 및 시스템 구성을 최적화하여 시스템 응답 속도 및 리소스 활용을 크게 향상시킵니다.

C에서 높은 DPI 디스플레이를 처리 할 수 있습니다. 1) DPI 및 스케일링을 이해하고 운영 체제 API를 사용하여 DPI 정보를 얻고 그래픽 출력을 조정하십시오. 2) 크로스 플랫폼 호환성을 처리하고 SDL 또는 QT와 같은 크로스 플랫폼 그래픽 라이브러리를 사용하십시오. 3) 성능 최적화를 수행하고 캐시, 하드웨어 가속 및 세부 사항 수준의 동적 조정을 통해 성능 향상; 4) 흐릿한 텍스트 및 인터페이스 요소와 같은 일반적인 문제를 해결하고 DPI 스케일링을 올바르게 적용하여 해결합니다.

Linux에서 파일 및 디렉토리 관리는 LS, CD, MKDIR, RM, CP, MV 명령을 사용하며 권한 관리는 CHMOD, Chown 및 CHGRP 명령을 사용합니다. 1. 파일 및 디렉토리 관리 명령 LS-L 목록 상세 정보와 같은 MKDIR-P는 디렉토리를 재귀 적으로 생성합니다. 2. CHMOD755FILE SET 파일 권한 설정, ChownUserFile 변경 파일 소유자 및 CHGRPGROUPFILE와 같은 허가 관리 명령은 파일 그룹을 변경합니다. 이러한 명령은 파일 시스템 구조 및 사용자 및 그룹 시스템을 기반으로하며 시스템 호출 및 메타 데이터를 통해 작동 및 제어합니다.
