누구든지 PHP 명령 실행 및 모범 사례와 관련하여 나에게 몇 가지 지침을 줄 수 있습니까?PHP 제안/대안
현재 일부 netbackup 데이터를 구문 분석하려고하는데 시스템 호출이 반환하는 엄청난 양의 데이터와 관련된 문제가 있습니다. retreiving 데이터의 양을 줄이기 위해 나는 다음과 같은 것을하고있다.
$awk_command = "awk -F, '{print $1\",\"$2\",\"$3\",\"$4\",\"$5\",\"$6\",\"$7\",\"$9\",\"$11\",\"$26\",\"$32\",\"$33\",\"$34\",\"$35\",\"$36\",\"$37\",\"$38\",\"$39\",\"$40}'";
exec("sudo /usr/openv/netbackup/bin/admincmd/bpdbjobs -report -M $master_name -all_columns | $awk_command", $get_backups, $null);
foreach ($get_backups as $backup_detail)
{
process_the_data();
write_data_to_db();
}
Im 수신 할 데이터의 양을 제한하기 위해 awk를 사용한다. 그것 없이는 거의 ~ 150MB의 데이터를 수신하게되며,이 데이터로 800KB의 데이터를 관리 할 수 있습니다.
awk의 똥이 불쾌하다고 나는 말할 필요가 없습니다. 이미 알고 있습니다. 그러나 나 자신 (그리고 제 코드)을 개선하기 위해 누군가가 대안을 제안 할 수 있습니까?
나는 proc_open
과 같은 것을 생각하고 있었지만 실제로 이점이 있는지 확실하지 않았습니다.
사용에 상당한 이점이 있습니다를'proc_open()'당신은 PHP에서 한 번에 데이터를 한 라인을 처리 할 수 있으며 전체 800K를로드 할 필요가 없기 때문에 즉시 메모리에 저장하십시오. 양방향 통신이 필요 없기 때문에 더 간단한 ['popen()'] (http://php.net/popen)을 사용하는 것이 좋습니다. 나는 개인적으로 그것이 당신이 원하는 것을하고 있다면'awk'를 사용하는 것으로 잘못된 것을 보지 못합니다 - 그것은 PHP에서 같은 일을하는 것이 훨씬 더 효율적입니다. 'proc_open()'/'popen()'의 스트림을 사용하면'fgetcsv()'를 사용하여 배열을 직접 처리하지 않고 검색 할 수 있습니다. – DaveRandom