2009-08-04 83 views
2

我有一個phing build文件,它使用<touch>任務來檢查某些文件的權限。Phing中的數組屬性

<target description="list of files to check permission" name="files-to-test"> 
    <property name="filesToCheck" value=""/> 
    <php expression="file_get_contents('filesToCheck.txt')" returnProperty="filesToCheck"/> 
    <foreach list="${filesToCheck}" param="file" target="permission-test"/> 
</target> 

<target description="Test the permission of files that needs to be written" name="permission-test"> 
    <touch file="${file}"/> 
</target> 

它調用一個extenal文件(filesToCheck.txt),它只是一個不同文件位置的列表。這工作正常。但是,當我想根據同一外部文件(filesToCheck.txt)中的某個特定鍵訪問特定文件時,它阻止了我重複使用我的PHP代碼中的相同列表。

我翻看了Phing的文檔,但沒有發現任何數組任務。有沒有人知道解決方法或正在創建一個新的任務是Phing中處理數組屬性的唯一解決方案?

回答

0

您可能只是創建一個臨時任務作爲一個快速n-dirty的解決方案,或者您自己的任務要更強大一點。我已經使用過Phing一段時間了,並且沒有什麼能夠跳出來作爲自己寫作的替代方案。

3

我最終創建了一個ad-hoc任務,因爲touch任務並不是檢查文件權限的最有效方式。如果用戶不是該文件的所有者,則PHP的touch不能按預期的方式工作。

這是我想出了即席任務:

  <adhoc-task name="is-file-writeable"> 
      <![CDATA[ 

      class IsFileWriteableTest extends Task 
      { 
       private $file; 

          function setFile($file) 
       { 
        $filesArray = parse_ini_file('filesToCheck.ini'); 
        $this->files = $filesArray; 
       } 

       function main() 
       { 
        foreach ($this->files as $fileName => $fileLocation)  
        { 
         if (!is_writable($fileLocation)) 
         {  
          throw new Exception("No write permission for $fileLocation"); 
         } 
        } 
       } 
      } 
      ]]> 
      </adhoc-task> 

      <target description="list of files to check permission" name="files-to-test"> 
      <is-file-writeable file="/path/to/filesToCheck.ini" /> 
      </target>